我如何在java中将stacktrace添加到我的调试打印输出中

时间:2008-09-10 18:04:26

标签: java debugging

从调试打印输出中打印堆栈跟踪的最简单方法是什么?通常在测试期间,您希望知道引发调试消息的情况的callstack。

8 个答案:

答案 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()更多的工作,但更灵活。