Debug
Der teure Fehler ist das Beheben der erstbesten plausiblen Ursache. Verbringe die ersten Minuten mit Eingrenzen, nicht mit Flicken.
Methode
- Erfasse den exakten Fehler. Vollständiger Fehlertext, Stacktrace, Exit-Code, Zeitstempel, Request-IDs, der ausgeführte Befehl. Setze ihn in einen Codeblock. Umformulierte Fehler verlieren das eine relevante Token.
- Reproduziere ihn. Finde den kleinsten, schnellsten Weg, um ihn auf Abruf auszulösen. Wenn du ihn nicht reproduzieren kannst, sage das und arbeite mit Logs; rate nicht stillschweigend.
- Ermittle, was sich geändert hat.
git log --since, aktuelle Deployments, Abhängigkeits-Updates, Konfigurations- oder IAM-Änderungen, Provider-Upgrades, ein ablaufendes Zertifikat. Die meisten Vorfälle sind auf eine Änderung zurückzuführen. - Stelle zwei oder drei Hypothesen auf und ordne sie nach Wahrscheinlichkeit und danach, wie günstig sie zu prüfen sind. Schreibe sie auf, bevor du testest.
- Teste eine Hypothese nach der anderen mit einer Änderung, die nur dann relevant wäre, wenn diese Hypothese wahr ist. Mache Änderungen, die nicht geholfen haben, rückgängig; häufe keine spekulativen Anpassungen an.
- Behebe die Ursache. Schreibe dann einen Regressionstest, der ohne die Reparatur fehlschlägt (siehe das Skill
tdd). - Verifiziere auf die gleiche Weise, wie du reproduziert hast, und führe die gesamte Suite aus.
Wo man je nach Symptom suchen sollte
| Symptom | Erste Prüfungen |
|---|---|
| Läuft lokal, schlägt in CI fehl | Env-Vars, Secrets, OS/Architektur, Node-/Python-Version, gecachte Abhängigkeiten, Zeitzone, Arbeitsverzeichnis |
| Intermittierend / Flaky | Geteilter Zustand zwischen Tests, Zeit, Reihenfolge, Netzwerk, Retry-Mechanismen, die echte Fehler verbergen |
| AWS AccessDenied | Welcher Prinzipal (aws sts get-caller-identity), Ressourcenrichtlinie vs. Identitätsrichtlinie, SCPs, Permission Boundaries, KMS-Key-Richtlinie, Region |
| Lambda-Timeout / Cold Start | VPC-Anbindung, DNS, Initialisierung außerhalb des Handlers, Speichergröße, Latenz nachgelagerter Dienste in X-Ray |
| Terraform-Fehler | Provider-Version, State-Drift (terraform plan -refresh-only), -target-Überreste, Lock-Datei |
| Kubernetes-Pod nicht bereit | kubectl describe pod, Events, Probes, Ressourcenlimits, Image-Pull, Secret/Configmap-Mounts |
| 5xx nach Deployment | Vorheriges Image/Commit vergleichen, Health-Check-Pfad, Env-/Config-Unterschiede, DB-Migrationsreihenfolge |
Regeln
- Lies die Logs, bevor du den Code liest. Logs sagen dir wo; Code sagt dir warum.
- Füge bei Bedarf temporäres Logging hinzu und entferne es vor dem Commit.
- „Repariere“ niemals, indem du Berechtigungen erweiterst, TLS-Verifizierung deaktivierst, Ausnahmen fängst und schluckst oder Retry-Mechanismen hinzufügst, ohne zu verstehen, was wiederholt wird.
- Wenn du es repariert hast, schreibe in einem Absatz nieder: Ursache, warum es nicht erkannt wurde, was es beim nächsten Mal verhindert. Dieser Absatz kommt in den PR oder den Commit-Text.