如何增加Java堆栈跟踪转储的显示行数?

有没有办法让Throwable.printStackTrace(PrintStream s)打印完整的堆栈跟踪,以便我可以看到超越"... 40 more"的最后一行?

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

注意包含字符"..."的行的存在。 这些行表明这个exception的堆栈跟踪的其余部分与由exception(“封闭”exception)引起的exception的堆栈跟踪底部的指定数目的帧匹配。

这种简写可以大大减less常见情况下的输出长度,在这种情况下,捕获的“引发exception”被捕获的包装exception是从相同的方法抛出的。

换句话说, "... x more"只出现在链式exception中,并且只有当堆栈跟踪的最后x行已经作为另一个链式exception的堆栈跟踪的一部分出现时。

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

快速猜测你的方法。

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