當您調試一些運行了一些並行線程的複雜Java代碼時,捕獲所有斷點並不容易,有時很難找到哪個路徑導致了問題。在這種情況下,我們需要在可疑位置打印方法調用堆棧。如何在Java中打印方法調用堆棧?如何打印java方法調用堆棧?
回答
以下是您如何打印源文件中給定位置的堆棧跟蹤。
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() + ")");
}
我不認爲這給你更多的信息比在IDE中使用調試器會給你。另外,它不會讓你有機會讓你看到變量的值,就像調試器一樣。我無法想象任何情況下,這將是有用的。這看起來對我來說,你已經帶來了一輛自行車到F1。 –
正確,但不是很有用。 – duffymo
更容易新Throwable()。printStacktrace() –
下面的代碼
System.out.println("Stack trace:");
StackTraceElement[] stackTraces = Thread.currentThread().getStackTrace();
for (int i = 1; i < stackTraces.length; i++) {
System.out.println(stackTraces[i]);
}
只需使用這都是一個StackTraceElement
的toString方法
public String toString() {
return getClassName() + "." + methodName +
(isNativeMethod() ? "(Native Method)" :
(fileName != null && lineNumber >= 0 ?
"(" + fileName + ":" + lineNumber + ")" :
(fileName != null ? "("+fileName+")" : "(Unknown Source)")));
}
的定義,這樣你就可以直接使用打印的StackTraceElement。
爲什麼downvoting? – nagendra547
- 1. 打印PHP調用堆棧
- 2. 如何在xcode中打印或查看方法調用堆棧?
- 3. 如何在java中打印堆棧
- 4. 從具有堆棧的方法打印
- 5. 在java中的通用堆棧的打印方法
- 6. 的Java方法調用堆棧複製
- 7. 打印深度調用堆棧
- 8. 打印堆棧幀
- 9. Java陣列堆棧,從上到下打印堆棧內容
- 10. Java異常堆棧跟蹤不打印
- 11. Java異常堆棧被壓制 - 如何打印出整個堆棧?
- 12. 如何在java中使用printStream參數打印堆棧?
- 13. powershell:如何在錯誤發生時打印總調用堆棧?
- 14. 如何在Mac OS X中打印內核調用堆棧
- 15. 如何在C++中打印堆棧
- 16. 如何打印Groovy堆棧跟蹤?
- 17. 如何打印StackOverflowException的堆棧跟蹤
- 18. 打印堆棧跟蹤
- 19. 打印堆棧跟蹤obfusated
- 20. 遞歸棧打印方法
- 21. 用於打印堆棧內容的遞歸方法
- 22. 如何打印完整的堆棧跟蹤Java中
- 23. 如何在java logback中打印自定義堆棧跟蹤?
- 24. Java-數據結構堆棧:從用戶輸入的堆棧打印出整數
- 25. 訪問Java調用堆棧
- 26. 如何在java中打印堆棧跟蹤到stdout進行調試?
- 27. 如何在java中添加堆棧跟蹤到我的調試打印輸出
- 28. 如何調用和打印方法
- 29. Android中的方法調用堆棧
- 30. Java堆棧方法(multipop)初學者java
你最好使用像IntelliJ這樣的真正的IDE。它顯示你完整的堆棧和更多。 – duffymo