Systematisch debuggen in 5 Schritten
Der 5-Schritte-Debugging-Prozess im Detail — reproduzieren, isolieren, identifizieren, beheben, verifizieren — mit konkreten Techniken fuer jeden Schritt.
🔄 Quick Recall: In der vorherigen Lektion hast du gelernt, Fehlermeldungen systematisch zu lesen: Typ, Beschreibung, Ort. Du weisst, dass du bei Stack Traces zuerst DEINE Codezeilen findest und dass „undefined" bedeutet, eine Ebene hoeher nach der Ursache zu suchen. Jetzt vertiefst du jeden Schritt des 5-Schritte-Prozesses.
Schritt 1: Reproduzieren
Ein Bug, den du nicht zuverlaessig ausloesen kannst, ist ein Bug, den du nicht verifiziert beheben kannst. Reproduktion ist nicht optional.
Checkliste fuer die Reproduktion:
- Welches Betriebssystem und welche Version?
- Welcher Browser (bei Web-Apps)?
- Welche Eingabedaten genau?
- Welche Reihenfolge von Aktionen?
- Welcher Nutzertyp (Admin, normaler Nutzer)?
- Tritt der Bug konsistent auf oder nur manchmal?
KI-Prompt fuer schwer reproduzierbare Bugs:
„Ein Nutzer meldet [Fehlerbeschreibung]. Bei mir kann ich es nicht reproduzieren. Welche Bedingungen koennte ich uebersehen? Der Nutzer verwendet [Browser/OS/Geraet]. Was sollte ich pruefen?"
✅ Quick Check: Warum ist Reproduktion der wichtigste Debugging-Schritt? (Antwort: Ohne zuverlaessige Reproduktion kannst du nicht (a) den Bug untersuchen, (b) Hypothesen testen oder (c) verifizieren, ob dein Fix funktioniert. Ein Fix ohne Reproduktion ist Hoffnung, keine Loesung.)
Schritt 2: Isolieren
Du weisst, dass der Bug existiert. Jetzt musst du herausfinden, WO genau.
Binaere Suche: Der Turbo
Die maechtigste Isolationstechnik: Teile das Problem in zwei Haelften, teste eine, schraenke ein, wiederhole.
| Suchraum | Tests mit binaerer Suche | Tests Zeile fuer Zeile |
|---|---|---|
| 100 Zeilen | 7 Tests | bis zu 100 Tests |
| 1.000 Zeilen | 10 Tests | bis zu 1.000 Tests |
| 10.000 Zeilen | 14 Tests | bis zu 10.000 Tests |
Weitere Isolationstechniken
- Auskommentieren: Code blockweise deaktivieren, bis der Bug verschwindet. Der zuletzt auskommentierte Block enthaelt den Bug
- Minimales Beispiel: Den Code auf das Minimum reduzieren, das den Bug noch zeigt. Oft wird die Ursache dabei offensichtlich
- Git bisect: Bei Git-Repos den Commit finden, der den Bug eingefuehrt hat (automatisierte binaere Suche ueber Commits)
Schritt 3: Identifizieren
Du weisst WO der Bug ist. Jetzt verstehst du WARUM.
Hypothesengetriebenes Debugging:
- Bilde eine Hypothese: „Ich glaube, die Variable X ist null, weil…"
- Teste die Hypothese: Fuege einen Log/Check ein, der X prueft
- Bestaetigt → Ursache gefunden
- Widerlegt → Neue Hypothese basierend auf dem Ergebnis
KI-Prompt fuer Hypothesengenerierung:
„Ich habe den Bug isoliert: [Beschreibung des Verhaltens] in [Code-Abschnitt]. Die erwartete Ausgabe ist [X], die tatsaechliche ist [Y]. Was sind die 3 wahrscheinlichsten Ursachen? Fuer jede Ursache: Wie kann ich sie testen?"
Schritt 4: Beheben
Jetzt — und erst jetzt — aenderst du Code.
Regeln fuer gute Fixes:
- Minimal: Aendere so wenig wie moeglich. Jede zusaetzliche Aenderung ist ein potenzieller neuer Bug
- Ursache, nicht Symptom: Wenn eine Variable null ist, finde heraus WARUM sie null ist — statt einfach einen null-Check einzubauen
- Verstaendlich: Wenn du den Fix nicht erklaeren kannst, hast du den Bug nicht verstanden
Schritt 5: Verifizieren
Der Fix ist geschrieben. Aber bist du sicher, dass er funktioniert? Und bist du sicher, dass er nichts Neues kaputt gemacht hat?
Verifikations-Checkliste:
- Der Bug tritt nicht mehr auf (den reproduzierten Testfall ausfuehren)
- Der Regressionstest besteht (Test-Driven Debugging)
- Bestehende Tests laufen noch durch (keine neuen Fehler)
- Edge Cases getestet (leere Eingaben, Grenzwerte, null)
✅ Quick Check: Was ist „Test-Driven Debugging"? (Antwort: Zuerst einen Test schreiben, der den Bug beweist (fehlschlaegt). Dann den Bug beheben, bis der Test besteht. Der Test bleibt als Regressionstest und verhindert, dass der gleiche Bug spaeter zurueckkommt.)
Key Takeaways
- Reproduzieren ist IMMER der erste Schritt — ohne Reproduktion kein verifizierter Fix
- Binaere Suche isoliert Bugs exponentiell schneller als lineares Suchen (10 Tests statt 1.000)
- Hypothesengetriebenes Debugging: Hypothese bilden → testen → bestaetigen/widerlegen → wiederholen
- Test-Driven Debugging: Erst den fehlschlagenden Test, dann den Fix — so kommt der Bug nie zurueck
- Minimale Fixes: So wenig Code wie moeglich aendern, Ursache statt Symptom beheben
Up Next
In der naechsten Lektion lernst du die konkreten Werkzeuge: Print-Debugging, IDE-Debugger, Browser DevTools — und wann du welches Werkzeug einsetzt.
Wissenscheck
Erst das Quiz oben abschließen
Lektion abgeschlossen!