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.
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.
Sie können das Dienstprogramm jstack verwenden, wenn Sie den aktuellen Aufrufstapel Ihres Prozesses überprüfen möchten.
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F [-m] [-l] <pid>
(to connect to a hung process)
jstack [-m] [-l] <executable> <core>
(to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
(to connect to a remote debug server)
Options:
-F to force a thread dump. Use when jstack <pid> does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
Das letzte Element des Arrays stellt das unterste Element des Stapels dar, also den jüngsten Methodenaufruf in der Sequenz.
A StackTraceElement has getClassName(), getFileName(), getLineNumber() and getMethodName().
Schleife durch StackTraceElement und erhalten Sie das gewünschte Ergebnis.
for (StackTraceElement ste : stackTraceElements )
{
//do your stuff here...
}
Ich habe die Antworten von oben verwendet und Formatierungen hinzugefügt
public final class DebugUtil {
private static final String SEPARATOR = "\n";
private DebugUtil() {
}
public static String formatStackTrace(StackTraceElement[] stackTrace) {
StringBuilder buffer = new StringBuilder();
for (StackTraceElement element : stackTrace) {
buffer.append(element).append(SEPARATOR);
}
return buffer.toString();
}
public static String formatCurrentStacktrace() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
return formatStackTrace(stackTrace);
}
}
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.