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

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

Thread.dumpStack();

如果你正在使用log4j

Exception e = new Exception(); log.error("error here", e); 

将打印堆栈跟踪打印到您的日志。

只是创建一个任意exception对我来说是个窍门:

 System.out.println("Oops, the bad thing happened"); new IllegalStateException().printStackTrace(); 

如果要将堆栈跟踪保存到String中,可以执行此操作;

 String exception = ""; for (StackTraceElement element : e.getStackTrace()) exception += element.toString() + "\n"; 

显然,e是一个例外。

此外,自动生成自己的exception只是为了找到调试的堆栈跟踪听起来很奇怪。 获取Eclipse并使用它的调试模式,它真的很棒。

除了@jjnguy所说的,如果你没有exception,你也可以调用Thread.getStackTrace()。

您应该在try-catch块中捕获exception。

 e.getStackTrace(); 

返回StackTraceElement []然后您可以解释。

也:

 e.printStackTrace() 

将…打印堆栈跟踪。

仅仅因为我自己需要它:

受答案的启发如何使用堆栈跟踪或reflection找到方法的调用者? ,您可以使用检索调用堆栈

 StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace() 

然后你处理和打印/记录你感兴趣的任何东西。比使用Thread.dumpStack()更多的工作,但更灵活。

要简单地将当前堆栈跟踪打印到stderr,您可以调用:

 Thread.dumpStack(); 

它本身就叫:

 new Exception("Stack trace").printStackTrace(); 

要输出到stdout而不是stderr, System.out传递给printStackTrace()

 new Exception("Stack trace").printStackTrace(System.out);