2017-08-29 1 views
-3

Wenn Sie einen komplexen Java-Code debuggen, der einige parallele Threads ausführt, ist es nicht einfach, alle Breakpoints zu erfassen, und manchmal ist es wirklich schwierig zu finden, welcher Pfad das Problem verursacht hat. In solchen Szenarien müssen wir den Methodenaufrufstapel an verdächtigen Standorten drucken. Wie kann ich den Methodenaufruf-Stack innerhalb von Java drucken?Wie Java-Methode Aufrufstapel drucken?

+5

Sie sind besser dran mit einer echten IDE wie IntelliJ. Es zeigt Ihnen den kompletten Stapel und mehr. – duffymo

Antwort

1

So drucken Sie den Stapel-Trace von einem bestimmten Speicherort in Ihrer Quelldatei.

System.out.println("Printing stack trace:"); 
StackTraceElement[] elements = Thread.currentThread().getStackTrace(); 
for (int i = 1; i < elements.length; i++) { 
    StackTraceElement s = elements[i]; 
    System.out.println("\tat " + s.getClassName() + "." + s.getMethodName() + "(" + s.getFileName() + ":" + s.getLineNumber() + ")"); 
} 
+3

Ich glaube nicht, dass dies gibt Ihnen mehr Informationen als die Verwendung des Debuggers in einer IDE würde Ihnen geben. Außerdem haben Sie nicht die Möglichkeit, die Werte Ihrer Variablen wie einen Debugger anzuzeigen. Ich kann mir keinen Umstand vorstellen, in dem dies nützlich wäre. Es sieht eher so aus, als hättest du ein Fahrrad zur Formel 1 gebracht. –

+0

Richtig, aber nicht sehr nützlich. – duffymo

+2

noch einfacher neu Throwable(). PrintStacktrace() –

-1

Verwenden Sie einfach unten Code

System.out.println("Stack trace:"); 
StackTraceElement[] stackTraces = Thread.currentThread().getStackTrace(); 
for (int i = 1; i < stackTraces.length; i++) { 
    System.out.println(stackTraces[i]); 
} 

Dies ist Definition der toString-Methode von StackTraceElement

public String toString() { 
    return getClassName() + "." + methodName + 
     (isNativeMethod() ? "(Native Method)" : 
     (fileName != null && lineNumber >= 0 ? 
      "(" + fileName + ":" + lineNumber + ")" : 
      (fileName != null ? "("+fileName+")" : "(Unknown Source)"))); 
} 

So können Sie direkt StackTraceElement drucken verwenden.

+0

Warum downvoting? – nagendra547

Verwandte Themen