我如何在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);