Frage

Was ist der einfachste Weg, einen Stacktrace aus einem Debugging-Ausdruck zu drucken?Während des Testens möchten Sie häufig den Callstack kennen, der zu der Situation führt, die eine Debug-Meldung auslöst.

War es hilfreich?

Andere Tipps

Wenn Sie mit log4j

Exception e = new Exception();
log.error("error here", e);

wird den Stacktrace zu Ihrem Protokoll drucken.

Wenn Sie den Stack-Trace in einen String zu speichern, dies zu tun;

String exception = "";
for (StackTraceElement element : e.getStackTrace())
   exception += element.toString() + "\n";

Wo e ist offensichtlich eine Ausnahme.

Außerdem ist es klingt sehr seltsam eine eigene Exception automatisch generieren nur für einen Debug eine Stack-Trace erhalten zu finden. Erhalten Sie Eclipse und es ist Debug-Modus verwenden, es ist wirklich genial.

Nur eine willkürliche Ausnahme zu schaffen funktioniert der Trick für mich:

System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();

Wie auch, was @jjnguy gesagt, wenn Sie eine Ausnahme nicht haben, können Sie auch anrufen Thread.getStackTrace ().

Sie sollten die Ausnahme in einem Try-Catch-Block werden zu kontrollieren.

e.getStackTrace();

Das gibt StackTraceElement [], dass Sie können dann interpretieren.

Auch:

e.printStackTrace()

wird ... drucken Sie die Stacktrace.

Um einfach den aktuellen Stack-Trace auf stderr zu drucken, können Sie anrufen:

Thread.dumpStack();

, die sich nur Anrufe:

new Exception("Stack trace").printStackTrace();

Für die Ausgabe auf stdout , anstatt stderr, System.out passieren printStackTrace():

new Exception("Stack trace").printStackTrace(System.out);

Nur weil ich es selbst benötigt:

Wie Antwort inspiriert Wie kann ich den Anrufer eines Verfahrens unter Verwendung stacktrace oder Reflexion finden? , können Sie den Call-Stack mit

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()

Dann sind Sie bearbeiten und drucken / log, was Sie interessiert sind. Mehr Arbeit als Thread.dumpStack() verwenden, aber flexibler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top