我遇到了Java StackOverflow错误,但是有问题的递归调用是如此之深,以至于它没有给我完整的堆栈跟踪。它只会转储StackOverflow异常的前1024行方法。
如何获得完整的堆栈跟踪,以便我知道根本原因?
答案 0 :(得分:12)
开关-XX:MaxJavaStackTraceDepth
允许更大和更小的堆栈走线长度。将其设置为-1
无限长度。 E.g:
-XX:MaxJavaStackTraceDepth=-1
答案 1 :(得分:2)
您可以使用-Xss来更改堆栈大小,但如果您有无限递归则无效。听起来你的停止条件可能无法解决。
答案 2 :(得分:-1)
手动打印堆栈,当你提供一个编写器时,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();
}