当您调试一些运行了一些并行线程的复杂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