EMZETT.
Login

Stacktrace lesen: Fehlermeldungen richtig auswerten

Kurz: Ein Stacktrace listet die Aufrufkette bis zur Fehlerstelle; liest man ihn von der richtigen Seite und achtet auf den eigenen Code, findet man die Ursache oft in Minuten.

Genauer: Wenn ein Programm abstürzt, gibt es eine Fehlermeldung mit vielen Zeilen aus. Viele Anfänger erschrecken, dabei ist der Stacktrace (Aufrufstapel) eine Wegbeschreibung zum Fehler: Er zeigt, welche Funktion welche aufgerufen hat, bis es knallte.

Im Detail

Aufbau (Python)

Traceback (most recent call last):
  File "main.py", line 12, in <module>
    ergebnis = berechne(daten)
  File "main.py", line 7, in berechne
    return summe / anzahl
ZeroDivisionError: division by zero

Python druckt die älteste Stelle oben, die letzte unten. Die letzte Zeile nennt Fehlerart und Meldung. Die Zeile direkt darüber zeigt die Stelle, an der es passiert ist (Datei, Zeilennummer, Funktion, Code).

Andere Sprachen

  • Java: Oben steht die Ausnahme (NullPointerException), darunter die Aufrufe, zuoberst der Fehlerort; Caused by: weist auf die ursprüngliche Ursache.
  • JavaScript/Node: Fehlerart und Meldung zuerst, dann at funktion (datei:zeile:spalte), die erste Zeile ist die Fehlerstelle.
  • Browser-Konsole: Klicke auf die Datei-Verknüpfung, um die Stelle im Quelltext zu sehen.

So gehst du vor

  1. Fehlerart und Meldung lesen und in eigene Worte fassen („Teilung durch null“).
  2. Die erste Zeile mit deinem eigenen Code suchen (nicht Bibliotheks-/Frameworkzeilen): Dorthin geht es.
  3. Variablenwerte an dieser Stelle prüfen (print, Debugger, Breakpoint).
  4. Fragen: Woher kommt der falsche Wert? Eine Ebene höher im Stacktrace nachsehen, wer die Funktion mit diesen Daten aufruft.
  5. Fehlermeldung googeln (in Anführungszeichen, ohne eigene Namen/Pfade) oder im Wiki/Fehlerwörterbuch nachsehen.
  6. Minimales Beispiel bauen, das den Fehler zeigt.

Fragen im Forum

Poste den vollständigen Stacktrace als Text (nicht als Foto), die relevanten Codezeilen, was du erwartet hast und was du schon versucht hast, Versionen (Sprache, Pakete, System). Entferne Passwörter, Schlüssel und persönliche Daten aus Logs. Im Produktivbetrieb gehören Stacktraces ins Log, nicht in die Antwort an Nutzer (sie verraten interne Details).

Siehe auch: Debugging, Exceptions, Logging und Log-Level, Fehlercodes-Überblick