Debugging: Fehler systematisch finden | Enjyn Gruppe
Hallo Welt
→
→
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

330 Dokumentationen verfügbar

Wissensdatenbank

Debugging Strategien Techniken

Zuletzt aktualisiert: 14.07.2026 um 12:29 Uhr

Debugging: Fehler systematisch finden

Gutes Debugging ist eine erlernbare Fähigkeit. Lernen Sie systematische Strategien, um Bugs effizient zu finden.

Der Debugging-Prozess

1. Reproduzieren
   └→ Bug konsistent nachstellen

2. Isolieren
   └→ Bereich eingrenzen

3. Verstehen
   └→ Ursache identifizieren

4. Fixen
   └→ Lösung implementieren

5. Verifizieren
   └→ Fix testen + Regression verhindern

Strategie 1: Reproduzieren

# Fragen:
- Wann tritt der Bug auf?
- Bei welchem User/Account?
- Welcher Browser/OS?
- Welche Schritte führen zum Bug?

# Reproduktion dokumentieren
1. Einloggen als user@example.com
2. Navigieren zu /settings
3. "Theme" auf "Dark" ändern
4. Auf "Save" klicken
→ Erwartung: Einstellungen gespeichert
→ Tatsächlich: 500 Error

# Minimal Reproducible Example
Reduzieren auf kleinsten Code der Bug zeigt

Strategie 2: Binary Search

# Bug in großer Codebasis finden

# Git Bisect
git bisect start
git bisect bad              # Aktuell ist kaputt
git bisect good v1.2.0      # Diese Version war OK

# Git checkt automatisch Commits aus
# Testen, dann:
git bisect good  # oder
git bisect bad

# Nach ~7 Schritten bei 100 Commits: Verursacher gefunden
git bisect reset

# Im Code: Hälfte auskommentieren
function complexFunction() {
    // Teil 1
    // ...

    // console.log('Checkpoint 1');

    // Teil 2
    // ...
}
# Bug in Teil 1 oder 2? Weiter halbieren.

Strategie 3: Rubber Duck Debugging

# Erkläre den Code Zeile für Zeile
# (einem Kollegen oder einer Gummiente)

function calculateTotal(items) {
    let total = 0;                    // "Ich initialisiere total mit 0"
    for (let item of items) {         // "Ich iteriere über alle Items"
        total += item.price;          // "Ich addiere... moment, was wenn
    }                                 //  price undefined ist?!"
    return total;
}

# Oft findet man den Bug beim Erklären

Browser DevTools

# Console
console.log('Simple output');
console.table([{a: 1}, {a: 2}]);     // Als Tabelle
console.group('Group');              // Gruppieren
console.time('Timer');               // Performance
console.trace();                     // Stack trace

# Debugger
debugger;  // Hält hier an wenn DevTools offen

# Breakpoints in DevTools
- Line Breakpoints: Klick auf Zeilennummer
- Conditional: Rechtsklick → "Add conditional"
- DOM Breakpoints: Element → Break on...
- XHR/Fetch Breakpoints: Sources → XHR Breakpoints

# Watch Expressions
- Variables überwachen während Debugging

# Call Stack
- Zeigt wie man zur aktuellen Stelle kam

Node.js Debugging

# Mit Inspector
node --inspect app.js
# Dann Chrome: chrome://inspect

# Break beim Start
node --inspect-brk app.js

# VS Code: launch.json
{
    "type": "node",
    "request": "launch",
    "name": "Debug",
    "program": "${workspaceFolder}/app.js",
    "skipFiles": ["/**"]
}

# Environment-basiertes Logging
const debug = require('debug')('app:server');
debug('Server starting on port %d', port);

# Aktivieren mit:
DEBUG=app:* node app.js

PHP Debugging (Xdebug)

# php.ini
[xdebug]
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_port=9003

# VS Code: launch.json
{
    "type": "php",
    "request": "launch",
    "name": "Listen for Xdebug",
    "port": 9003
}

# Im Code
var_dump($variable);
print_r($array);
debug_backtrace();  // Stack trace

Häufige Bug-Patterns

// Off-by-One
for (let i = 0; i <= array.length; i++)  // <= statt <

// Null/Undefined
user.profile.name  // Was wenn profile null ist?
user?.profile?.name  // Optional Chaining

// Async Timing
let data;
fetchData().then(d => data = d);
console.log(data);  // undefined! (noch nicht geladen)

// Closure in Loop
for (var i = 0; i < 3; i++) {
    setTimeout(() => console.log(i), 100);  // 3, 3, 3
}
// Fix: let statt var

// Mutation
const config = { debug: true };
initModule(config);
console.log(config.debug);  // Vielleicht geändert!

// Vergleiche
"10" > "9"   // false! (String-Vergleich)
10 > 9       // true

Logging für Debugging

// Strukturiertes Debug-Logging
function processOrder(order) {
    const logger = require('./logger');

    logger.debug('Processing order', {
        orderId: order.id,
        items: order.items.length,
        total: order.total
    });

    try {
        // ... processing
    } catch (error) {
        logger.error('Order processing failed', {
            orderId: order.id,
            error: error.message,
            stack: error.stack
        });
        throw error;
    }
}

Network Debugging

# Browser: Network Tab
- Request/Response Headers
- Timing (DNS, Connect, TTFB)
- Response Body

# Command Line
curl -v https://api.example.com/users
curl -X POST -d '{"name":"test"}' -H "Content-Type: application/json" url

# Proxy (Charles, Fiddler)
- HTTPS Traffic inspizieren
- Requests modifizieren
- Throttling simulieren
💡 Tipp: Schreiben Sie einen Test der den Bug reproduziert, bevor Sie ihn fixen. So ist der Bug für immer dokumentiert und kann nicht zurückkehren.

Weitere Informationen

Texterstellung mit KI-Unterstützung

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
LLMs können Fehler machen. Ihre Nachrichten werden an Google Gemini weitergeleitet.
120