Eclipseでは、例外がスローされたときにアプリケーションの状態をデバッグできるように、例外のブレークポイントに設定されたオプションがあります。
ケース1
この最初の例では、すべてがうまく機能しています。完全なコールスタックが表示され、コールスタックの任意のレベルをクリックして、クラッシュ時のローカル変数を確認できます。
ケース2
ただし、コードの他の部分(UIスレッドまたはGLSurfaceViewスレッドのように見えるもの)で例外が発生した場合、まったく役に立たない動作が発生します。強制終了後、logcatで例外を確認できます。
05-30 20:18:10.905: E/AndroidRuntime(23982): FATAL EXCEPTION: GLThread 13
05-30 20:18:10.905: E/AndroidRuntime(23982): java.lang.NullPointerException
05-30 20:18:10.905: E/AndroidRuntime(23982): at x.x.x.Graphics.MyRenderer.drawSubRenderable(MyRenderer.java:237)
05-30 20:18:10.905: E/AndroidRuntime(23982): at x.x.x.Graphics.MyRenderer.onDrawFrame(MyRenderer.java:181)
05-30 20:18:10.905: E/AndroidRuntime(23982): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1363)
05-30 20:18:10.905: E/AndroidRuntime(23982): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118)
しかし、クラッシュ時にアプリケーションを停止することはできません。アプリケーションは停止しますが、これしか取得できません(呼び出しスタックに自分のコードが表示されません):
ケース3
最後に、UIスレッドで例外をスローすると、このモンスターが発生しますが、例外をスローしたコードはどこにも表示されません。
質問
例外がスローされる理由を調べることができるように、すべての場合に実際のコードのブレークポイントにコードを取得できないのはなぜですか?なぜそれが機能する場合と機能しない場合があるのですか?Androidソースをインストールした場合、役に立ちますか?(現在、例外が発生したときに「ソースが見つかりません」というメッセージが表示されるだけです)