2009-07-22 120 views

回答

98

你不需要;该信息存在于堆栈跟踪的其他地方。从printStackTrace()的文档:

请注意包含字符"..."的行的存在。这些行指示此异常的堆栈跟踪的其余部分与由异常导致的异常(“封闭”异常)导致的异常堆栈跟踪底部的指定帧数相匹配。

在捕捉到“引发异常”的同一方法抛出包装异常的常见情况下,这种简写可以大大减少输出的长度。

换句话说,在"... x more"只出现在一个异常链,只有当最后x线的堆栈跟踪已经存在另一个异常链的堆栈跟踪的一部分。

假设一个方法捕获异常Foo,将它包装在异常栏中,然后抛出Bar。然后Foo的堆栈跟踪将被缩短。如果由于某种原因需要完整的跟踪,则只需在Foo的堆栈跟踪中的...之前取最后一行并在条的堆栈跟踪中查找;该行下的所有内容正是Foo堆栈跟踪中打印的内容。

+0

我会反驳这一点。我在6年后添加到这个线程中,所以事情发生了很大变化。这是我的stacktrace的pastebin。我没有看到任何重叠,像这样的答案表明:http://pastebin.com/raw/QQ7EGzSK我错过了什么? – Shadoninja 2016-07-06 15:30:47

3

快速猜测你的方法。

static void printLongerTrace(Throwable t){ 
    for(StackTraceElement e: t.getStackTrace()) 
     System.out.println(e); 
}