當您調試一些運行了一些並行線程的複雜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. 如何在xcode中打印或查看方法調用堆棧?
- 2. 如何在java中打印堆棧
- 3. 的Java方法調用堆棧複製
- 4. 打印深度調用堆棧
- 5. Java異常堆棧被壓制 - 如何打印出整個堆棧?
- 6. 如何在java中使用printStream參數打印堆棧?
- 7. 如何打印Groovy堆棧跟蹤?
- 8. 如何在C++中打印堆棧
- 9. 如何打印StackOverflowException的堆棧跟蹤
- 10. 打印堆棧跟蹤obfusated
- 11. 打印堆棧跟蹤
- 12. 遞歸棧打印方法
- 13. 用於打印堆棧內容的遞歸方法
- 14. 如何打印完整的堆棧跟蹤Java中
- 15. Java-數據結構堆棧:從用戶輸入的堆棧打印出整數
- 16. 訪問Java調用堆棧
- 17. 如何在java中添加堆棧跟蹤到我的調試打印輸出
- 18. 如何在java中打印堆棧跟蹤到stdout進行調試?
- 19. 如何調用和打印方法
- 20. Android中的方法調用堆棧
- 21. 使用CORBA時打印堆棧跟蹤
- 22. 限制用於Java方法調用的CPU /堆棧?
- 23. Java堆棧溢出,因爲遞歸方法調用
- 24. 在堆棧展開期間打印堆棧變量
- 25. 打印PHP在PHP外部運行調用堆棧
- 26. 在printStackTrace()上打印完整調用堆棧?
- 27. 調用堆棧打印函數時無限循環
- 28. 通用堆棧方法
- 29. 如何在調用特定Java方法時轉儲堆棧跟蹤?
- 30. 如何使用GlassFish打印完整的堆棧跟蹤?
你最好使用像IntelliJ這樣的真正的IDE。它顯示你完整的堆棧和更多。 – duffymo