从调试打印输出中打印堆栈跟踪的最简单方法是什么?通常在测试期间,您希望知道引发调试消息的情况的callstack。
答案 0 :(得分:17)
如果你正在使用log4j
Exception e = new Exception();
log.error("error here", e);
会将堆栈跟踪打印到您的日志中。
答案 1 :(得分:9)
答案 2 :(得分:5)
如果要将堆栈跟踪保存到String中,可以执行此操作;
String exception = "";
for (StackTraceElement element : e.getStackTrace())
exception += element.toString() + "\n";
显然,e是一个例外。
此外,为了找到调试的堆栈跟踪,自动生成自己的Exception听起来很奇怪。获取Eclipse并使用它的调试模式,它真的很棒。
答案 3 :(得分:4)
只是创建一个任意异常对我来说很有用:
System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();
答案 4 :(得分:3)
除了@jjnguy所说的,如果你没有异常,你也可以调用Thread.getStackTrace()。
答案 5 :(得分:2)
您应该在try-catch块中捕获异常。
e.getStackTrace();
返回StackTraceElement [],然后你可以解释它。
此外:
e.printStackTrace()
将...打印堆栈跟踪。
答案 6 :(得分:2)
要简单地将当前堆栈跟踪打印到stderr,您可以调用:
Thread.dumpStack();
本身只是打电话:
new Exception("Stack trace").printStackTrace();
要输出到标准输出而不是stderr,请将System.out
传递给printStackTrace()
:
new Exception("Stack trace").printStackTrace(System.out);
答案 7 :(得分:1)
仅仅因为我自己需要它:
受答案How do I find the caller of a method using stacktrace or reflection?的启发,您可以使用
检索调用堆栈StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
然后您处理并打印/记录您感兴趣的内容。比使用Thread.dumpStack()
更多的工作,但更灵活。