在Java中,有没有办法查看完整的、未经截断的堆栈跟踪(例如通过增加记录的帧数),或者以其他方式进入堆栈跟踪的底部?通常情况下,堆栈跟踪从顶部截断 1024 帧,但对于堆栈溢出问题而言,这几乎毫无意义,因为您确实需要看到谁调用了触发递归的函数,位于底部附近。更好的情况是在堆栈的中间截断,但显然Sun的JVM不够智能。
也许甚至有一些特殊的Sun特定标志?我尝试将堆栈大小减小到最小允许值(-Xss1000),但那仍然超过 1024 帧。
在我的情况下,我正在尝试调试在Hadoop mapper中发生的堆栈溢出,但仅当运行非常大的输入时才会出现。我认为问题是因为在一个非常非常大的链接列表上执行了一个递归操作(Scala的
也许甚至有一些特殊的Sun特定标志?我尝试将堆栈大小减小到最小允许值(-Xss1000),但那仍然超过 1024 帧。
在我的情况下,我正在尝试调试在Hadoop mapper中发生的堆栈溢出,但仅当运行非常大的输入时才会出现。我认为问题是因为在一个非常非常大的链接列表上执行了一个递归操作(Scala的
foldRight
),我需要将其重写为非递归...但我需要知道谁调用了foldRight
。这是一个基本例程,在许多地方直接和间接调用,并且有很多代码可以使用,因此这是高度不明显的。