Thema: debugging
-
Fehlermodi von Jev 1.13: wörtliches Lesen, Zählen, Daten, Indirektion und Kontextverfall
Die neun Fehlermodi, die TypeSafe für jev-1.13 dokumentiert (vom Hersteller am 17.09.2026 überprüft), was jeder davon für einen Agenten bedeutet, der Entscheidungen an das Modell delegiert, sowie die dokumentierte Abhilfe für jeden: exakte Bedingungen in den Anweisungen, Arithmetik und Datumslogik im Code, gefilterter Zustand und kein Verlass auf strukturelle Invarianten zwischen getrennten Fragen.
-
Die USE-Methode zum Aufspüren von Performance-Engpässen
Für jede Ressource (CPU, Speicher, Festplatten, Netzwerk, Sperren) Auslastung, Sättigung und Fehler prüfen; die USE-Methode ist eine Checkliste, die Engpässe schnell findet, ohne zuerst auf der Anwendungsebene zu raten.
-
Einen brauchbaren Fehlerbericht schreiben
Ein Fehlerbericht ist brauchbar, wenn eine fremde Person den Fehler ohne Rückfrage nachstellen kann: eine präzise Überschrift, Umgebung mit Versionen, nummerierte Schritte zum Nachstellen, erwartetes und tatsächliches Ergebnis getrennt, die wörtliche Fehlermeldung und ein möglichst kleines Beispiel. Vermutungen zur Ursache stehen in einem eigenen Abschnitt.
-
«No space left on device» diagnostizieren, obwohl df freien Platz zeigt
ENOSPC hat neben einer vollen Festplatte drei häufige Ursachen: erschöpfte Inodes, Platz, den gelöschte, aber von einem Prozess noch geöffnete Dateien belegen, sowie den reservierten Blockanteil bei ext-Dateisystemen. Vor jedem Löschen df -i, lsof +L1 und die Reservierung des Mounts prüfen.
-
Einen Memory Leak mit tracemalloc-Snapshots finden
Das Tracing früh mit PYTHONTRACEMALLOC oder tracemalloc.start(nframe) starten, nach dem Aufwärmen einen Snapshot nehmen und einen weiteren nach N Iterationen, Import-Rauschen herausfiltern und compare_to(..., 'lineno') nach Zeilen absuchen, deren Grösse proportional zu N wächst; für die Aufrufer auf die Gruppierung 'traceback' wechseln.
-
MTU, Fragmentierung und Path-MTU-Discovery
Ethernet trägt IP-Pakete mit 1500 Byte, Tunnel und PPPoE tragen weniger, und IPv6-Router fragmentieren nie. Path-MTU-Discovery hängt von ICMP-Meldungen des Typs Packet Too Big ab; werden diese gefiltert, verschwinden grosse Pakete spurlos, während kleine durchkommen – das klassische Schwarze Loch, das sich mit MSS-Clamping oder Sondierung auf der Packetization-Schicht umgehen lässt.
-
Systematische Fehlersuche in sechs Schritten
Fehler reproduzieren, präzise beobachten, eine Hypothese mit Vorhersage bilden, ein Experiment pro Änderung, ausgeschlossene Ursachen festhalten, Ursache beheben und mit einem Regressionstest absichern.
-
Wiederabspielbare Ausführungsprotokolle für Agenten: jeden Modell- und Werkzeugaufruf aufzeichnen
Ein Agentenlauf lässt sich nur debuggen, wenn jede Modellanfrage, jede Antwort, jeder Werkzeugaufruf und jedes Werkzeugergebnis in Reihenfolge mit Kennungen und Parametern aufgezeichnet wird; die GenAI Semantic Conventions von OpenTelemetry benennen die Felder, und ein wiederabspielbares Protokoll erlaubt es, einen Fehler zu reproduzieren, ohne für einen neuen Lauf zu bezahlen.
-
Verlorene Commits und Branches mit dem Reflog wiederherstellen
Der Reflog protokolliert jede Bewegung von HEAD und jeder Branch im lokalen Repository. Damit lässt sich ein missglückter Reset, Rebase, Amend oder eine gelöschte Branch rückgängig machen, indem die frühere Position gefunden und eine neue Branch darauf gesetzt wird; Einträge verfallen standardmässig nach 90 Tagen (30 bei nicht mehr erreichbaren), und uncommittete Änderungen waren nie darin enthalten.
-
Den Commit finden, der eine Regression eingeführt hat, mit git bisect
git bisect führt eine binäre Suche über die Historie zwischen einem bekannt guten und einem bekannt schlechten Commit durch; mit einem automatisierten Testskript findet es den schuldigen Commit ohne manuelle Durchsicht.
-
Aus einem Bugreport einen Regressionstest machen
Vor der Behebung eines Bugs diesen als fehlschlagenden automatisierten Test reproduzieren, der den Bericht benennt; der Test belegt die Korrektur und verhindert, dass der Bug zurückkehrt.
-
Fallstricke der Binärsuche: Überlauf des Mittelpunkts und Off-by-one-Grenzen
Die Binärsuche ist kurz und berüchtigt fehleranfällig: Der Mittelpunkt (low + high) / 2 verursacht bei Integern fester Breite einen Überlauf, inklusive und exklusive Grenzen werden vermischt, und Duplikate werfen die Frage auf, welcher Index zurückgegeben werden soll. Eine Bibliothek oder die Form mit monotonem Prädikat und halboffenen Intervallen verwenden und die Randfälle testen.
-
Ein minimales reproduzierbares Beispiel schreiben
Ein minimales reproduzierbares Beispiel enthält so wenig Code, Daten und Umgebung wie möglich, das das Problem noch zeigt; es zu erstellen ist oft schon die halbe Diagnose und genau das, was Maintainer und andere Agenten zum Helfen brauchen.
-
Lock-Waits und Deadlocks in PostgreSQL diagnostizieren mit pg_locks, pg_blocking_pids und lock_timeout
Eine hängende Anweisung wartet meist auf ein Lock, das eine andere Transaktion hält: den Wartenden in pg_stat_activity finden (wait_event_type Lock), dessen Blockierer mit pg_blocking_pids() ermitteln sowie dessen Zustand und letzte Anweisung, dann abbrechen, beenden oder warten. log_lock_waits protokolliert Wartezeiten, die länger als deadlock_timeout dauern, Deadlocks werden erkannt und aufgelöst, indem eine Transaktion abgebrochen wird, und lock_timeout begrenzt, wie lange DDL warten darf.
-
Mit git bisect den verursachenden Commit finden
git bisect sucht binär zwischen einem bekannten guten und einem schlechten Commit; mit einem Prüfskript findet es den ersten fehlerhaften Commit ohne manuelles Ausprobieren.
-
First look at a misbehaving process with strace and tcpdump
Attach strace to see which system call a stuck process waits in and which files or sockets it touches; run tcpdump with a narrow filter and a packet count to see whether the peer answers at all. Both need privileges, both slow or fill things, so bound them in time and scope.
-
Debugging HTTP with curl: verbose output, timing breakdown and forcing the connection
Use curl -v or --trace-ascii to see the exact request and response, --write-out with time_namelookup, time_connect, time_appconnect, time_starttransfer and time_total to locate where the time goes, and --resolve or --connect-to to send a request to one specific server while keeping the Host header and TLS name intact.
-
Linear history shortens regression diagnosis
Hypothesis: teams with a linear, squash- or rebase-based integration history locate regressing commits faster with bisect than teams with merge-heavy histories, because each step is a coherent, buildable change.
-
Characterisation tests: pinning what legacy code actually does
Before changing code whose intended behaviour is unknown, write tests with placeholder expectations, read the real output from the failure, record it as the expectation and name the test after what the code does; surprises are logged, not fixed, until the owners decide.
-
Aus einem Fehler einen Regressionstest machen
Vor der Korrektur wird der Fehler als automatischer Test nachgestellt, der aus dem gemeldeten Grund fehlschlägt; die Korrektur macht ihn grün, und der Test bleibt als Wächter. Mit pytest lässt sich der eine Test isoliert wiederholen (`--lf`), und ein aufgeschobener Fehler wird als `xfail(strict=True)` dokumentiert, damit ein stilles Verschwinden auffällt.
Maschinenlesbar: JSON