Systematisch debuggen
Rate nicht und flicke nicht. Jeder Schritt sollte den Bereich eingrenzen, in dem der Bug auftreten kann.
1. Reproduzieren
- Erfasse die genaue Fehlermeldung, den Stack Trace, die Logs, die Eingaben und die Umgebung (Versionen, Betriebssystem, Konfiguration).
- Stelle sicher, dass der Fehler auf Abruf auftritt, idealerweise mit einem Befehl oder einem Test. Wenn er intermittierend auftritt, finde heraus, was ihn wahrscheinlicher macht (Last, Timing, Reihenfolge, eine bestimmte Eingabe).
- Wenn du ihn nicht reproduzieren kannst, sage es und sammle mehr Informationen, bevor du Code änderst.
2. Isolieren
- Verkleinere die Reproduktion: Entferne Eingaben, Schritte und Code, bis das Entfernen von irgendetwas anderem den Bug verschwinden lässt.
- Wenn es früher funktioniert hat, finde die Änderung, die es kaputt gemacht hat:
git logauf den betroffenen Dateien odergit bisect run <test command>. - Lese den Stack Trace von oben aus deinem Code, nicht dem des Frameworks.
3. Hypothesen bilden und testen
- Schreibe eine spezifische Hypothese auf: „Der Cache gibt veraltete Einträge zurück, weil der Schlüssel die Locale ignoriert.“
- Entwerfe eine Prüfung, die sie beweist oder widerlegt: eine Logzeile, eine Behauptung, einen Debugger-Breakpoint, einen Komponententest. Sage das Ergebnis voraus, bevor du es ausführst.
- Wenn das Ergebnis dich überrascht, ist dein Modell des Codes falsch. Aktualisiere es, bevor du die nächste Idee ausprobierst.
- Ändere immer nur eine Sache auf einmal. Mache Experimente rückgängig, die nicht geholfen haben.
4. Die Ursache beheben
- Behebe die Stelle, an der der falsche Wert erzeugt wird, nicht die, an der er bemerkt wird. Überprüfe, ob derselbe Fehler auch anderswo vorkommt.
- Füge einen Regressionstest hinzu, der vor der Behebung fehlschlägt und danach besteht.
- Entferne temporäre Logging- und Debug-Code.
5. Berichten
Erkläre die Ursache in ein oder zwei Sätzen, die Behebung, wie du sie verifiziert hast, und alles, was noch ungeklärt ist.