我如何在Java中将堆栈跟踪添加到调试打印输出中

时间:2020-03-05 18:50:57  来源:igfitidea点击:

从调试打印输出中打印堆栈跟踪的最简单方法是什么?通常,在测试过程中,我们希望了解导致出现调试消息的情况的调用堆栈。

解决方案

回答

我们应该在try-catch块中捕获异常。

e.getStackTrace();

这将返回我们可以解释的StackTraceElement []。

还:

e.printStackTrace()

将...打印堆栈跟踪。

回答

仅仅创建一个任意的异常对我来说就可以了:

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

回答

就像@jjnguy所说的一样,如果没有异常,还可以调用Thread.getStackTrace()。

回答

Thread.dumpStack();

回答

如果要将堆栈跟踪保存到字符串中,则可以执行此操作;否则,请执行以下操作。

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

显然,e是个例外。

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

回答

如果我们使用的是log4j

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

将stacktrace打印到日志中。

回答

只是因为我自己需要它:

受到答案的启发,如何使用stacktrace或者反射找到方法的调用者? ,我们可以使用来检索调用堆栈

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

然后,我们可以处理和打印/记录任何我们感兴趣的内容。比使用Thread.dumpStack()更多的工作,但是更灵活。