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

How to avoid the 1024 lines of Java exception stack limit

我遇到了Java StackOverflow错误,但是令人讨厌的递归调用是如此之深,以至于它无法提供完整的堆栈跟踪信息。它只会转储StackOverflow异常的前1024行方法。

如何获取完整的堆栈跟踪信息,以便了解根本原因?


开关-XX:MaxJavaStackTraceDepth允许越来越大的堆栈走线长度。将其设置为-1无限长。例如:

1
-XX:MaxJavaStackTraceDepth=-1


您可以使用-Xss更改堆栈大小,但是如果您无限制地进行递归,则无济于事。听起来您的停止条件可能无法解决。


手动打印堆栈,当您提供编写者时,e.printStackTrace()上的限制不适用(可能需要引用此内容,但使用此方法时我从未经历过裁剪)。 >

下面是一些我用来获取完整跟踪的简单代码:

1
2
3
4
5
6
7
8
9
10
11
12
/**
 * 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();
}