Thread.getStackTrace()返回StackTraceElement[]
。我该如何将其转换为与Exception.printStackTrace()
返回相同格式的String
?
澄清一下:我没有异常,只有一个线程。我想使用与异常堆栈跟踪相同的格式显示线程的堆栈跟踪。
Thread.getStackTrace()返回StackTraceElement[]
。我该如何将其转换为与Exception.printStackTrace()
返回相同格式的String
?
澄清一下:我没有异常,只有一个线程。我想使用与异常堆栈跟踪相同的格式显示线程的堆栈跟踪。
这很简单,你只需要打印它们,并加上你想要的任何前缀。
如果要像 printStackTrace()
一样打印,前缀应为 "\tat "
。
证明
// Show printStackTrace() output
new RuntimeException().printStackTrace(System.out);
// Similar output using getStackTrace()
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
System.out.println("getStackTrace()");
for (int i = 1; i < stackTrace.length; i++)
System.out.println("\tat " + stackTrace[i]);
输出
java.lang.RuntimeException
at Test.main(Test.java:5)
getStackTrace()
at Test.main(Test.java:8)
for
循环跳过了索引0,因为那是getStackTrace()
本身的堆栈帧。StackTraceElement.toString()
。我没有意识到它有正确的格式。 - Gili
StackTraceElement.toString()
的格式看起来与printStackTrace()
中每个条目的格式完全相同,遵循at
。 - Andreas