1128 Stimmen

Wie kann ich den aktuellen Stack-Trace in Java abrufen?

Wie erhalte ich die aktuelle Stapelverfolgung in Java, so wie man in .NET Folgendes tun kann Environment.StackTrace ?

Ich fand Thread.dumpStack() aber das ist nicht das, was ich will - ich möchte den Stack-Trace zurückbekommen, nicht ausdrucken.

42voto

stikkos Punkte 1836

Sie können dafür die Apache Commons verwenden:

String fullStackTrace = org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace(e);

25voto

Vicky Kapadia Punkte 5915

Unter Android ist es viel einfacher, dies zu verwenden:

import android.util.Log;
String stackTrace = Log.getStackTraceString(exception);

24voto

kukis Punkte 4233

Eine andere Lösung (nur 35 31 Zeichen):

new Exception().printStackTrace();   
new Error().printStackTrace();

22voto

Adamski Punkte 52945

Um den Stack-Trace aller Threads zu erhalten, können Sie entweder das Dienstprogramm jstack oder JConsole verwenden oder ein kill -quit-Signal (auf einem Posix-Betriebssystem) senden.

Wenn Sie dies jedoch programmatisch tun möchten, können Sie ThreadMXBean verwenden:

ThreadMXBean bean = ManagementFactory.getThreadMXBean();
ThreadInfo[] infos = bean.dumpAllThreads(true, true);

for (ThreadInfo info : infos) {
  StackTraceElement[] elems = info.getStackTrace();
  // Print out elements, etc.
}

Wie bereits erwähnt, ist es viel einfacher, wenn Sie nur den Stack-Trace des aktuellen Threads haben wollen - verwenden Sie einfach Thread.currentThread().getStackTrace() ;

18voto

In Java 9 gibt es einen neuen Weg:

public static void showTrace() {

  List<StackFrame> frames =
    StackWalker.getInstance( Option.RETAIN_CLASS_REFERENCE )
               .walk( stream  -> stream.collect( Collectors.toList() ) );

  for ( StackFrame stackFrame : frames )
    System.out.println( stackFrame );
}

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