How to avoid the 1024 lines of Java exception stack limit [duplicate]
I ran into a Java StackOverflow error, but the offending recursive call is so deep, that it does not give me the full stack trace. It only dumps out the first 1024 lines of methods of the StackOverflow exception.
How can I get the full stack trace, so that I can know the root cause?
The switch -XX:MaxJavaStackTraceDepth
allows larger and smaller stack trace lengths. Set it to -1
for an unlimited length. E.g.:
-XX:MaxJavaStackTraceDepth=-1
You can use -Xss to change the stack size, but it won't help if you have unbounded recursion. It sounds like your stopping condition might not be worked out.
Print the stack manually, the limit put on e.printStackTrace() does not apply when you provide a writer (might need to quote me on that but I've never experienced it being cropped when using this method).
Here is some easy code that I employ to get full traces:
/**
* 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();
}
精彩评论