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

235 Dokumentationen verfügbar

Wissensdatenbank

Debugging Strategien Techniken

Zuletzt aktualisiert: 20.01.2026 um 10:05 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

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120