788 Stimmen

Was ist ein Stack-Trace, und wie kann ich ihn zur Fehlersuche in meiner Anwendung verwenden?

Wenn ich meine Anwendung ausführe, erhalte ich manchmal eine Fehlermeldung, die wie folgt aussieht:

Exception in thread "main" java.lang.NullPointerException
        at com.example.myproject.Book.getTitle(Book.java:16)
        at com.example.myproject.Author.getBookTitles(Author.java:25)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

Man hat dies als "Stack-Trace" bezeichnet. Was ist ein Stack-Trace? Was kann er mir über den Fehler in meinem Programm sagen?


Zu dieser Frage: Ich erlebe oft, dass ein unerfahrener Programmierer eine Frage stellt, bei der er "einen Fehler erhält", und dann einfach seinen Stack-Trace und einen beliebigen Codeblock einfügt, ohne zu verstehen, was der Stack-Trace ist oder wie er ihn verwenden kann. Diese Frage ist als Referenz für unerfahrene Programmierer gedacht, die Hilfe benötigen, um den Wert eines Stack Trace zu verstehen.

34 Stimmen

Wenn eine Stacktrace-Zeile nicht den Dateinamen und eine Zeilennummer enthält, wurde die Klasse für diese Zeile nicht mit Debug-Informationen kompiliert.

11voto

rghome Punkte 7901

In den anderen Beiträgen wird beschrieben, was ein Stack-Trace ist, aber es kann trotzdem schwierig sein, damit zu arbeiten.

Wenn Sie einen Stack-Trace erhalten und die Ursache der Exception nachvollziehen wollen, ist ein guter Ausgangspunkt für das Verständnis der Exception die Verwendung der Java Stack Trace-Konsole において Eclipse . Wenn Sie eine andere IDE verwenden, kann es eine ähnliche Funktion geben, aber diese Antwort bezieht sich auf Eclipse.

Stellen Sie zunächst sicher, dass Sie alle Ihre Java-Quellen in einem Eclipse-Projekt zur Verfügung haben.

Dann im Java Perspektive, klicken Sie auf das Feld Konsole (in der Regel am unteren Rand). Wenn die Konsolenansicht nicht sichtbar ist, wählen Sie den Menüpunkt Fenster -> Ansicht anzeigen und wählen Sie Konsole .

Klicken Sie dann im Konsolenfenster auf die folgende Schaltfläche (rechts)

Consoles button

und wählen Sie dann Java Stack Trace Konsole aus der Dropdown-Liste.

Fügen Sie den Stack-Trace in die Konsole ein. Es wird dann eine Liste von Links zu Ihrem Quellcode und zu anderen verfügbaren Quellcodes angezeigt.

So könnte es aussehen (Bild aus der Eclipse-Dokumentation):

Diagram from Eclipse documentation

Der zuletzt durchgeführte Methodenaufruf ist der top des Stapels, d. h. die oberste Zeile (ohne den Nachrichtentext). Wenn Sie auf dem Stapel nach unten gehen, gehen Sie in der Zeit zurück. Die zweite Zeile ist die Methode, die die erste Zeile aufruft, usw.

Wenn Sie Open-Source-Software verwenden, müssen Sie möglicherweise die Quellen herunterladen und Ihrem Projekt beifügen, wenn Sie sie untersuchen wollen. Laden Sie die Quellcode-Jars herunter, öffnen Sie in Ihrem Projekt die Referenzierte Bibliotheken Ordner, um Ihr jar für Ihr Open-Source-Modul zu finden (dasjenige mit den Klassendateien), dann klicken Sie mit der rechten Maustaste, wählen Eigenschaften und fügen Sie das Quell-Jar hinzu.

11voto

Eugene S Punkte 6372

Um die anderen Beispiele zu ergänzen, gibt es innere (verschachtelte) Klassen die mit dem $ Zeichen. Zum Beispiel:

public class Test {

    private static void privateMethod() {
        throw new RuntimeException();
    }

    public static void main(String[] args) throws Exception {
        Runnable runnable = new Runnable() {
            @Override public void run() {
                privateMethod();
            }
        };
        runnable.run();
    }
}

führt zu diesem Stacktrace:

Exception in thread "main" java.lang.RuntimeException
        at Test.privateMethod(Test.java:4)
        at Test.access$000(Test.java:1)
        at Test$1.run(Test.java:10)
        at Test.main(Test.java:13)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X