如何将StackTraceElement[]转换为字符串?

3

Thread.getStackTrace()返回StackTraceElement[]。我该如何将其转换为与Exception.printStackTrace()返回相同格式的String

澄清一下:我没有异常,只有一个线程。我想使用与异常堆栈跟踪相同的格式显示线程的堆栈跟踪。


@Andreas 显然我已经这样做了。格式看起来与期望的结果完全不同。你想让我在问题中明确提到这一点吗? - Gili
StackTraceElement.toString() 的格式看起来与 printStackTrace() 中每个条目的格式完全相同,遵循 at - Andreas
@Andreas 没错。我漏掉了这一点。我标记了您的答案为已接受。 - Gili
1个回答

5

这很简单,你只需要打印它们,并加上你想要的任何前缀。

如果要像 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接