Eclipse LogCatウィンドウは、例外スタックトレースを切り取ります
質問
Eclipseの私のログキャットウィンドウには、各例外のStacktraceの最初の数行のみが表示されます。これは、例外がどこで発生したかをよく見ることができないことを意味します。この設定を変更する方法はありますか?
解決
「... 12行以上...」の部分について言及している場合、別の例外の原因である例外のみがわかります。スタックトレースの上部が以前のトレースと同じである場合、フレームの完全なセットは最も外側の例外のみで表示され、他のトレースは「...」トリートメントを取得します。
別の言い方をすれば、示されていないトレースの塊は、例外の原因チェーンの前半に表示されたトレースの複製です。たとえば、メソッドのコードがあるとします main()
電話 one()
, 、呼び出します two()
, 、 等々。 four()
例外をスローします。 two()
それをキャッチして再投与します。例外は次のようになります:
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
明示的にリストするのではなく、「例外による」例外が「... 3以上」と言っている one()
, main()
, 、 と dalvik.system.NativeStart.main
. 。したがって、最初の例外の完全なトレースを取得するには、そのトレースを読むことから始めてから、上記のトレースを続けます。
オーバーラップはありません - two()
両方に表示されますが、「最初の」トレースでは、 three()
, 、そして「再スロー」トレースでは throw
命令。
他のヒント
すべてのログメソッド(log.d、log.i、log.eなど)をオーバーロードできます (String tag, String msg, Throwable tr)
パラメーター。3番目のパラメーターは例外です。これにより、LogCatの完全なスタックトレースが得られます
http://developer.android.com/reference/android/util/log.html
コードが高すぎるスタックを生成するメソッドを呼び出した場合、コードで例外を処理し、ログに関連するものは何でも出力できます。
例外がない場合、そのようなハンドラーをコードのどこに置くべきかさえわからない場合は、問題は完全に他の場所にあります - それよりも例外を少しうまく処理する必要があります。