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.

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 );
}

17voto

ripper234 Punkte 211096

Ich Dummerchen, es ist Thread.currentThread().getStackTrace();

16voto

Witold Kaczurba Punkte 8919

Stacktrace abrufen:

StackTraceElement[] ste = Thread.currentThread().getStackTrace();

Stacktrace drucken (JAVA 8+):

Arrays.asList(ste).forEach(System.out::println);

Stacktrage drucken (JAVA 7):

StringBuilder sb = new StringBuilder();

for (StackTraceElement st : ste) {
    sb.append(st.toString() + System.lineSeparator());
}
System.out.println(sb);

11voto

Zitrax Punkte 17318

Zum Auffädeln mit Guave:

Throwables.getStackTraceAsString(new Throwable())

10voto

Salvador Valencia Punkte 1220

Ich habe eine Dienstprogramm-Methode, die eine Zeichenfolge mit dem Stacktrace zurückgibt:

static String getStackTrace(Throwable t) {
    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw, true);
    t.printStackTrace(pw);
    pw.flush();
    sw.flush();
    return sw.toString();
}

Und einfach logit wie...

... 
catch (FileNotFoundException e) {
    logger.config(getStackTrace(e));
}

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