2010-08-05 2 views
9

ich in einen Java-Stackoverflow-Fehler lief zu vermeiden, aber der säumige rekursiven Aufruf ist so tief, dass es mir nicht gibt den vollständigen Stack-Trace. Es werden nur die ersten 1024 Zeilen von Methoden der StackOverflow-Ausnahme ausgegeben.Wie die 1024 Zeilen Java-Ausnahme-Stack-Grenze

Wie kann ich das volle Stack-Trace zu erhalten, so dass ich die Ursache wissen können?

+2

keine Antwort, sondern auch prüfen, mit Haltepunkten Debuggen, Logging etc. – polygenelubricants

+1

Die Ursache ist in den ersten Zeilen, sollte der Rest gleich aussehen. Könnten Sie versuchen, den Stacktrace zu posten, um ihn sich anzusehen? (Wahrscheinlich in pastebin.com oder so etwas?) – OscarRyz

+0

Sind Sie mit Rekursion durch Zufall? Wenn ja, hilft dies http://blogs.msdn.com/b/oldnewthing/archive/2009/01/07/9286576.aspx. Finden Sie im Zusammenhang Diskussion über SO: http://stackoverflow.com/questions/951635/how-to-handle-stackoverflowerror-in-java –

Antwort

1

Sie können -Xss verwenden, um die Stapelgröße zu ändern, aber es wird nicht helfen, wenn Sie unbegrenzt Rekursion haben. Es hört sich so an, als ob deine Stopp-Bedingung nicht erfüllt wäre.

+6

Wenn überhaupt, * * niedriger die Stack-Größe, so dass die Ausnahme geschieht früher und die Stacktrace paßt innerhalb der erlaubten Linien! :-) –

1

Drucken Sie den Stapel manuell, der Grenzwert, der auf e.printStackTrace() gesetzt wird, gilt nicht, wenn Sie einen Schreiber angeben (muss mich vielleicht zitieren, aber ich habe noch nie erlebt, dass er abgeschnitten wurde). Hier

ist einiger einfacher Code, den ich verwende, um vollständige Spuren zu erhalten:

/** 
* 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

Funktioniert nicht. Ich habe nur 1024 Zeilen, es zeigt nicht die Ursache. – Pacerier

8

Der Schalter -XX:MaxJavaStackTraceDepth ermöglicht größere und kleinere Stack-Trace Längen. Stellen Sie es auf eine unbegrenzte Länge auf -1 ein. Z.B .:

-XX:MaxJavaStackTraceDepth=-1 
Verwandte Themen