从调试打印输出中打印堆栈跟踪的最简单方法是什么?通常在测试期间,您想知道导致引发调试消息的情况的调用堆栈。
Johan Lübcke
问问题
15086 次
8 回答
20
如果您使用的是 log4j
Exception e = new Exception();
log.error("error here", e);
会将堆栈跟踪打印到您的日志中。
于 2008-09-12T19:07:34.600 回答
11
于 2008-09-10T18:27:42.670 回答
6
如果要将堆栈跟踪保存到字符串中,可以这样做;
String exception = "";
for (StackTraceElement element : e.getStackTrace())
exception += element.toString() + "\n";
其中 e 显然是一个例外。
此外,自动生成自己的异常只是为了找到调试的堆栈跟踪,这听起来很奇怪。获取 Eclipse 并使用它的调试模式,真是太棒了。
于 2008-09-11T11:20:31.987 回答
4
只需创建一个任意异常对我来说就可以了:
System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();
于 2008-09-10T18:06:44.703 回答
3
和@jjnguy 说的一样,如果没有异常,也可以调用Thread.getStackTrace()。
于 2008-09-10T18:07:18.913 回答
2
您应该在 try-catch 块中捕获异常。
e.getStackTrace();
这将返回 StackTraceElement[] ,然后您可以对其进行解释。
还:
e.printStackTrace()
将...打印堆栈跟踪。
于 2008-09-10T18:05:41.333 回答
2
要简单地将当前堆栈跟踪打印到 stderr,您可以调用:
Thread.dumpStack();
它本身只是调用:
new Exception("Stack trace").printStackTrace();
要输出到stdout而不是 stderr,请传递System.out
给printStackTrace()
:
new Exception("Stack trace").printStackTrace(System.out);
于 2016-04-06T00:19:41.823 回答
1
只是因为我自己需要它:
受答案启发如何使用堆栈跟踪或反射找到方法的调用者?,您可以使用检索调用堆栈
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
然后你处理和打印/记录你感兴趣的任何东西。比使用更多的工作Thread.dumpStack()
,但更灵活。
于 2009-11-16T14:51:05.010 回答