Eclipse の logcat ウィンドウには、例外ごとに StackTrace の最初の数行しか表示されません。これは、例外が発生した場所を確認できないことが多いことを意味します。この設定を変更する方法はありますか?
3 に答える
「...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
one()
「原因による」例外は、、、、を明示的にリストするのではなく、「... 3 つ以上」と言い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
コードが高すぎるスタックを生成するメソッドを呼び出す場合、コードで例外を処理し、ログに関連するものをすべて出力できます (また、処理する必要があります)。
例外処理がまったくなく、そのようなハンドラーをコードのどこに置くべきかさえわからない場合、問題は完全に別の場所にあります。例外をそれよりも少しうまく処理する必要があります。