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?
Antwort
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() + ")");
}
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. –
Richtig, aber nicht sehr nützlich. – duffymo
noch einfacher neu Throwable(). PrintStacktrace() –
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.
Warum downvoting? – nagendra547
- 1. Rufen Sie Aufrufstapel von beliebigem Thread innerhalb C
- 2. Zeigen Sie den Aufrufstapel in einer Delphi Win32-Anwendung an
- 3. Maximaler Aufrufstapel überschritten, wenn Klasse innerhalb eines Moduls instanziiert wird
- 4. Ist es möglich, den Aufrufstapel programmgesteuert in VB6 abzurufen?
- 5. "Aufrufstapel" für C++ - Fehler in Visual Studio 2005
- 6. Wie UWP drucken ListView ItemTemplate drucken
- 7. Wie beende ich einen .NET-Thread, bei dem der Aufrufstapel beschädigt ist?
- 8. Python - Nur Drucken "Drucken"
- 9. php, wie Schrägstriche drucken
- 10. Wie Python-Listenobjekt drucken?
- 11. Wie ungültige QTime drucken?
- 12. Wie Skriptparameter sequenziell drucken?
- 13. Wie Androider Befehl drucken
- 14. Wie json Objekteigenschaftenwerte drucken?
- 15. Drucken Drucken Dialog
- 16. Wie PHP-Seite mit HTML-Tags mit qz drucken drucken?
- 17. Wie man Nasetests drucken kann Unicode lesbar drucken?
- 18. Wie wird das Dialogfeld "Drucken" zum Drucken eines Dokuments verwendet?
- 19. Wie Drucken-Taste und andere Inhalte auf Seite drucken
- 20. So drucken Sie nach JAVAFX gui wie Drucken auf Konsole
- 21. Warum funktioniert Drucken() nicht wie Drucken (Typ (2)) in Lua?
- 22. Sicherstellen, dass der Aufrufstapel einer Methode immer eine andere Methode in Java enthält
- 23. Wie Registerkarte in Protokollnachricht drucken?
- 24. wie Jframe mit Swing drucken?
- 25. Wie Array in JavaScripts drucken
- 26. Wie Tabelle mit Javascript drucken?
- 27. Wie in UWP App drucken?
- 28. Wie conn Inhalt hübsch drucken?
- 29. Wie pdf.js Dokument zu drucken?
- 30. Wie QString in quots drucken
Sie sind besser dran mit einer echten IDE wie IntelliJ. Es zeigt Ihnen den kompletten Stapel und mehr. – duffymo