2010-05-25 9 views
17

Mein Logcat-Fenster in Eclipse zeigt nur die ersten Zeilen des StackTrace für jede Ausnahme an. Dies bedeutet, dass ich oft nicht sehen kann, wo eine Ausnahme aufgetreten ist. Gibt es eine Möglichkeit, diese Einstellung zu ändern?Eclipse Logcat-Fenster schneidet Exception-Stack-Traces ab

+0

Was SDK-Version verwenden Sie? Das ist ein ziemlich seltsames Verhalten ... Können Sie bitte ein Beispiel für eine Ausgabe angeben, die die Stack-Trace abschneidet? * Bearbeiten *: Ich habe das Eclipse-Tag nicht gesehen, sorry. Wie auch immer, wenn du den originalen Logcat verwendest, denke ich, dass du keine Probleme haben wirst: 'adb logcat' – Cristian

+0

Wenn du dich auf den" ... 12 mehr Zeilen ... "Teil beziehst, siehst du das nur für Ausnahmen, die waren die Ursache für eine weitere Ausnahme. Wenn der obere Teil des Stack-Trace derselbe wie der andere ist, wird der gesamte Satz von Frames nur für einen von ihnen gezeigt, und der andere Teil erhält die Behandlung "...". (Sie müssen wirklich mehr Details zu Ihrer Frage hinzufügen - wir schätzen nur, was Sie wollen.) – fadden

+0

@Fadden: Sie haben Recht - es schneidet überhaupt nicht ab. Wenn Sie diesen Kommentar als Antwort veröffentlichen, werde ich ihn akzeptieren. – Casebash

Antwort

32

Wenn Sie sich auf den Teil "... 12 weitere Zeilen ..." beziehen, sehen Sie nur das für Ausnahmen, die die Ursache für eine weitere Ausnahme waren. Wenn der obere Teil des Stack-Trace derselbe wie der frühere Trace ist, wird der vollständige Satz von Frames nur für die äußerste Ausnahme angezeigt, und die anderen Traces erhalten die Behandlung "...".

Anders ausgedrückt, der Teil einer Spur, der nicht angezeigt wird, ist ein Duplikat einer Spur, die früher in der Ausnahme Cause-Kette angezeigt wurde. Nehmen wir zum Beispiel an, dass ich Code habe, wo die Methode main()one() aufruft, die two() aufruft, und so weiter. four() löst eine Ausnahme aus. two() fängt es und wirft es erneut. Die Ausnahme wird wie folgt aussehen:

java.lang.RuntimeException: re-throw 
    at Foo.two(Foo.java:14) 
    at Foo.one(Foo.java:7) 
    at Foo.main(Foo.java:3) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.RuntimeException: first 
    at Foo.four(Foo.java:23) 
    at Foo.three(Foo.java:19) 
    at Foo.two(Foo.java:12) 
    ... 3 more 

Die „verursacht durch“ Ausnahme, sagt „... 3 mehr“ und nicht als explizite Auflistung one(), main() und dalvik.system.NativeStart.main. Um die vollständige Ablaufverfolgung der anfänglichen Ausnahme zu erhalten, würden Sie zunächst mit dem Lesen der Ablaufverfolgung beginnen und dann mit der obigen Ablaufverfolgung fortfahren.

Hinweis gibt es keine Überlappung - two() erscheint in beide, aber in dem „ersten“ verfolgen, es ist auf den Anruf zu three(), und in dem „re-throw“ trace es ist auf der throw Anweisung.

+0

Also, was ist die Lösung, wenn die ursprüngliche Ausnahme diejenige ist, die Sie mehr als 7 oder mehr Zeilen sehen möchten? – George

+0

Ich schrieb die Erklärung um und fügte ein Beispiel hinzu. – fadden

+1

Ja, ich habe seit einiger Zeit nicht mehr mit "echtem" Java gearbeitet, aber ich hätte dies durch googeln nach "Java stacktrace 12 more" oder so etwas herausfinden sollen. Wie Sie darauf hinweisen, sind die redigierten ("12 mehr") Zeilen doppelte Zeilen vom obigen Stacktrace. Ich hatte den Eindruck, dass LogCat "hilfreiche" Zeilen des Stacktrace trimmen würde, aber das ist nicht der Fall. Danke, dass du mein Missverständnis behoben hast. – George

-1

Wenn Ihr Code eine Methode aufruft, die einen zu hohen Stack erzeugt, können Sie (und sollten) die Exception in Ihrem Code verarbeiten und ausgeben, was für Logs relevant ist.

Wenn Sie keine Ausnahmebehandlung haben und Sie nicht einmal wissen, wo in Ihrem Code sollten Sie solch einen Handler setzen, dann ist das Problem ganz woanders - Sie sollten Ausnahmen ein wenig besser als das handhaben.

Verwandte Themen