我遇到了Java StackOverflow错误,但是有问题的递归调用是如此之深,以至于它没有给我完整的堆栈跟踪。它只会转储StackOverflow异常的前1024行方法。
如何获得完整的堆栈跟踪,以便我知道根本原因?
我遇到了Java StackOverflow错误,但是有问题的递归调用是如此之深,以至于它没有给我完整的堆栈跟踪。它只会转储StackOverflow异常的前1024行方法。
如何获得完整的堆栈跟踪,以便我知道根本原因?
开关 -XX:MaxJavaStackTraceDepth
允许更大和更小的堆栈走线长度。将其设置为 -1
无限长度。例如。:
-XX:MaxJavaStackTraceDepth=-1
您可以使用-Xss来更改堆栈大小,但如果您有无限递归则无效。听起来你的停止条件可能没有解决。
手动打印堆栈,当你提供一个编写器时,e.printStackTrace()的限制不适用(可能需要引用我,但我从未体验过使用这种方法时被裁剪)。
这是一些简单的代码,我用来获得完整的跟踪:
/**
* Produces a Java-like stack trace string.
*
* @param e
* @return
*/
public static String exceptionStack(Throwable e) {
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
e.printStackTrace(printWriter);
return result.toString();
}