2010-08-05 9 views
9

Me encontré con un error de Java StackOverflow, pero la llamada recursiva ofensiva es tan profunda que no me proporciona el seguimiento completo de la pila. Solo vacía las primeras 1024 líneas de métodos de la excepción StackOverflow.Cómo evitar las 1024 líneas del límite de la pila de excepción de Java

¿Cómo puedo obtener el seguimiento completo de la pila, para poder conocer la causa raíz?

+2

una respuesta, pero vea también la depuración con puntos de interrupción, la tala, etc. – polygenelubricants

+1

La raíz del problema es en las primeras líneas, el resto debe ser el mismo. ¿Podrías tratar de publicar la stacktrace para echarle un vistazo? (¿Probablemente en pastebin.com o algo así?) – OscarRyz

+0

¿Está utilizando recursion por casualidad? Si es así, esto ayuda a http://blogs.msdn.com/b/oldnewthing/archive/2009/01/07/9286576.aspx. Ver la discusión relacionada en SO: http://stackoverflow.com/questions/951635/how-to-handle-stackoverflowerror-in-java –

Respuesta

1

Puede usar -Xss para cambiar el tamaño de la pila, pero no ayudará si tiene recursividad ilimitada. Parece que su condición de detención podría no resolverse.

+6

En todo caso, * menor * el tamaño de la pila, por lo que la excepción ocurre antes y la stacktrace se ajusta a las líneas permitidas. :-) –

1

Imprima la pila manualmente, el límite puesto en e.printStackTrace() no se aplica cuando proporciona un escritor (podría necesitar citarme pero nunca he visto que se haya recortado al usar este método).

Aquí hay un código fácil que empleo para obtener huellas completos:

/** 
* 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(); 
} 
+0

No funciona. Tengo solo 1024 líneas, no muestra la causa raíz. – Pacerier

8

El interruptor -XX:MaxJavaStackTraceDepth permite longitudes de rastreo de pila más grandes y más pequeñas. Configúrelo en -1 para una longitud ilimitada. Ej .:

-XX:MaxJavaStackTraceDepth=-1 
No
Cuestiones relacionadas