如何扩展Java堆栈跟踪的大小以查看堆栈底部?(触发堆栈溢出)

在Java中,是否有任何方法可以查看完整的,未截断的堆栈跟踪(例如,通过增加记录的帧数),或者以其他方式查看堆栈跟踪的 底部

?通常,堆栈跟踪会从顶部截断为1024帧,但是对于堆栈溢出问题,这是毫无价值的,因为您确实需要查看是谁触发了触发递归的调用,位于底部附近。在堆栈 中间

截断会更好,但是显然Sun的JVM不够聪明。

也许甚至一些特定于Sun的特殊标志?我尝试将堆栈大小减小到最小允许值(-Xss1000),但仍然超过1024帧。

就我而言,我正在尝试调试Hadoop映射器中发生的堆栈溢出,但仅当在非常大的输入上运行时才发生。我认为问题是由于foldRight在一个非常大的链表上执行了一个递归操作(Scala

),所以我需要以非递归方式重写它……但是我需要知道是谁调用了foldRight。这是一个在许多地方直接和间接调用的基本例程,并且我正在使用很多代码,因此这是非常不明显的。

回答:

尝试使用-XX:MaxJavaStackTraceDepthJVM选项。

这是Stas博客的描述

最高 没有。Java异常的堆栈跟踪中的行数(0表示全部)。在Java>

1.6的情况下,值0实际上表示0。必须指定值-1或任何负数以打印所有堆栈(在Windows上使用1.6.0_22和1​​.7.0进行测试)。如果Java

<= 1.5,则值0表示所有内容,JVM在负数上阻塞(在Windows上使用1.5.0_22测试)。

以上是 如何扩展Java堆栈跟踪的大小以查看堆栈底部?(触发堆栈溢出) 的全部内容, 来源链接: utcz.com/qa/401912.html

回到顶部