CodeGym /Kurse /JAVA 25 SELF /Aufrufstapel (Stack Trace)

Aufrufstapel (Stack Trace)

JAVA 25 SELF
Level 11, Lektion 5
Verfügbar

1. Einleitung

Stack Trace (Aufrufstapel) – das ist die Liste der Methoden, die in Ihrem Programm aufgerufen wurden, bis der Fehler (eine Exception) auftrat. Wenn im Programm eine Exception entsteht, gibt Java den Stack Trace automatisch auf dem Bildschirm aus. Das ist wie „Spuren im Schnee“: Sie sehen, über welche Schritte das Programm zum Fehler gelangt ist.

Analogie:
Stellen Sie sich vor, Sie gehen durch ein Labyrinth und stoßen plötzlich gegen eine Wand. Der Stack Trace ist eine Karte, die zeigt, durch welche Gänge Sie gegangen sind, bevor Sie sich verirrt haben.

Wie sieht ein Stack Trace aus?

Wenn im Programm ein Fehler auftritt, gibt Java ungefähr folgende Meldung aus:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Main.divide(Main.java:10)
    at Main.main(Main.java:5)

Was steht hier?

  • Exception in thread "main" – in welchem Thread der Fehler aufgetreten ist (meist "main").
  • java.lang.ArithmeticException: / by zero – der Typ der Exception und ihre Meldung.
  • at Main.divide(Main.java:10) – die Methode divide in der Klasse Main, Zeile 10.
  • at Main.main(Main.java:5) – die Methode main in der Klasse Main, Zeile 5.

Jede Zeile at ... ist ein Schritt im Aufrufstapel. Der oberste Eintrag ist die Stelle, an der der Fehler aufgetreten ist. Darunter stehen die Methoden, die diese Methode aufgerufen haben, und so weiter bis zum Programmanfang.

2. Wie liest man den Stack Trace?

Schritt 1. Exception-Typ und Meldung finden

Die erste Zeile enthält stets den Fehlertyp und seine Beschreibung:

java.lang.ArithmeticException: / by zero

Das ist bereits ein Hinweis: Der Fehler hängt mit einer Division durch Null zusammen.

Schritt 2. Auf die erste Zeile „at ...“ schauen

Das ist die Stelle, an der der Fehler tatsächlich aufgetreten ist:

at Main.divide(Main.java:10)

Das heißt, der Fehler ist in der Methode divide der Klasse Main in Zeile 10 aufgetreten.

Schritt 3. Im Stack nach oben gehen

Die nächste Zeile zeigt, wer diese Methode aufgerufen hat:

at Main.main(Main.java:5)

Also hat die Methode main divide aufgerufen, und der Fehler „stieg“ nach oben. Die Zeilennummer ist 5.

Schritt 4. Eigene Klassen finden

In einem langen Stack Trace tauchen oft Systemmethoden auf (z. B. aus den Paketen java.util, java.io).
Ihre eigenen Klassen stehen meist näher am Anfang der Liste. Achten Sie auf Klassen- und Dateinamen – suchen Sie die eigenen!

3. Beispiel: Analyse eines realen Stack Trace

Code:

public class Main 
{
    public static void main(String[] args) 
    {
        int result = divide(10, 0);
        System.out.println("Ergebnis: " + result);
    }

    public static int divide(int a, int b) 
    {
        return a / b;
    }
}

Fehler:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Main.divide(Main.java:8)
    at Main.main(Main.java:3)

Analyse:

  • Fehler: Division durch Null (ArithmeticException).
  • Aufgetreten in der Methode divide in Zeile 8.
  • Aufgerufen aus der Methode main in Zeile 3.

Was tun?
Öffnen Sie die Datei Main.java, schauen Sie in Zeile 8 – dort finden Sie die Division durch Null. Korrigieren Sie sie!

4. Stack Trace mit mehreren Methoden

Code:

public class Main 
{
    public static void main(String[] args) 
    {
        process();
    }

    public static void process() 
    {
        calculate();
    }

    public static void calculate() 
    {
        int[] arr = {1, 2, 3};
        System.out.println(arr[10]); // Fehler!
    }
}

Fehler:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3
    at Main.calculate(Main.java:11)
    at Main.process(Main.java:7)
    at Main.main(Main.java:3)

Analyse:

  • Fehler: Index außerhalb der Array-Grenzen (ArrayIndexOutOfBoundsException).
  • Aufgetreten in calculate (Zeile 11).
  • Aufgerufen aus process (Zeile 7).
  • Aufgerufen aus main (Zeile 3).

Fazit:
Der Stack Trace zeigt den gesamten Pfad, auf dem das Programm zum Fehler gelangt ist.

5. Typische Fehler beim Umgang mit dem Stack Trace

Fehler Nr. 1: Den Stack Trace ignorieren.
Anfänger schauen oft nur auf den „roten Fehler“ und lesen den Aufrufstapel nicht. Tun Sie das nicht! Stack Trace ist der Hinweis darauf, wo Sie den Bug suchen sollten.

Fehler Nr. 2: Die Fehlermeldungszeile mit der Fehlerstelle verwechseln.
Wichtig: Die erste Zeile ist der Fehlertyp, und die Fehlerstelle steht in der ersten Zeile at ....

Fehler Nr. 3: Den Fehler in Systemklassen suchen.
Wenn Sie Zeilen wie at java.base/java.util.Scanner.nextInt(Scanner.java:123) sehen, stürzen Sie sich nicht in die Java-Quelltexte. Schauen Sie, wer diese Methode in Ihrem Code aufgerufen hat.

Fehler Nr. 4: Zeilennummern nicht nutzen.
Die Zeilennummer ist Ihr bester Freund. Öffnen Sie die Datei, suchen Sie die entsprechende Zeile – und Sie sehen den Fehler.

Fehler Nr. 5: Nicht verstehen, dass der Stack Trace ein „Pfad“ ist.
Der Stack Trace zeigt, wie das Programm zum Fehler gelangt ist. Manchmal steckt der Bug nicht in der obersten Zeile, sondern darin, wie Sie die Methode aufgerufen haben.

1
Aufgabe
JAVA 25 SELF, Level 11, Lektion 5
Gesperrt
Küchenkalkulator und seine unangenehme Überraschung 🥧
Küchenkalkulator und seine unangenehme Überraschung 🥧
1
Aufgabe
JAVA 25 SELF, Level 11, Lektion 5
Gesperrt
Der Held und sein nicht existierendes Artefakt im Inventar 🏹
Der Held und sein nicht existierendes Artefakt im Inventar 🏹
1
Aufgabe
JAVA 25 SELF, Level 11, Lektion 5
Gesperrt
Code-Detektiv: Untersuchung eines Fehlers im Berichtssystem 📉
Code-Detektiv: Untersuchung eines Fehlers im Berichtssystem 📉
1
Aufgabe
JAVA 25 SELF, Level 11, Lektion 5
Gesperrt
Tiefes Eintauchen: Analyse eines Fehlers in einem mehrstufigen System 🪆
Tiefes Eintauchen: Analyse eines Fehlers in einem mehrstufigen System 🪆
1
Umfrage/Quiz
Ausnahmen, Level 11, Lektion 5
Nicht verfügbar
Ausnahmen
Ausnahmen
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION