如何避免1024行Java异常堆栈限制

时间:2010-08-05 18:54:49

标签: java

我遇到了Java StackOverflow错误,但是有问题的递归调用是如此之深,以至于它没有给我完整的堆栈跟踪。它只会转储StackOverflow异常的前1024行方法。

如何获得完整的堆栈跟踪,以便我知道根本原因?

3 个答案:

答案 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();
}