在 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源代码会有帮助吗?(目前,当我遇到异常时,只会收到“找不到源”消息)