java - 为什么我可以查看某些异常的实时调用堆栈,而不能查看其他异常的实时调用堆栈?

标签 java android eclipse debugging exception

在 Eclipse 中,我可以将选项设置为任何异常的断点,这样我就可以在引发异常时调试应用程序状态。

案例1

在第一个示例中,一切都运行良好。它显示了完整的调用堆栈,我可以单击调用堆栈的任何级别并查看崩溃时的局部变量。

enter image description here

<小时/>

案例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)



但我无法在崩溃时停止应用程序。应用程序停止,但我只得到这个(我在调用堆栈中看不到我自己的代码):

enter image description here



案例3

最后,如果我在 UI 线程上抛出异常,我会得到这个怪物,但抛出异常的代码又无处可见:

enter image description here

问题

为什么在所有情况下我都无法在实际代码上设置断点,以便我可以检查抛出异常的原因?为什么它在某些情况下有效,而在其他情况下不起作用?如果我安装了android源会有帮助吗? (目前,当我遇到异常时,只会收到“未找到源”消息)

最佳答案

所以我做了更多研究,我想我可以猜测发生了什么。

我目前只捕获未捕获的异常,我猜想 Android 回调中发生的任何异常都会被处理并重新抛出,从而从 Activity 堆栈跟踪中删除我的源代码。

如果我捕获所有捕获的异常,那么在所有情况下我都会像我想要的那样在调用堆栈中找到我的代码。

不幸的是,如果我捕获所有捕获的异常,我会中断在 android 框架中生成和内部处理的可能超过 100 个异常,这使得捕获的异常中断有些无用。

希望这里有一些更好的解决方案,如果您知道的话请回答!

关于java - 为什么我可以查看某些异常的实时调用堆栈,而不能查看其他异常的实时调用堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10827155/

相关文章:

android - Eclipse 错误 - 无法完成安装,因为找不到一个或多个必需项

java - 如何在 Eclipse 插件中运行 .exe 并捕获输出。 ( java )

在 Eclipse SIGSEV 中编译 C 二进制文件

java - 为什么从 CMD 运行 JAR 文件时收到 NoClassDefFoundError?

java - 如何使用不同的Java版本配置Mule ESB(mule.bat)?

java - 将 JFileChooser 置于所有窗口之上

java - 将curl命令转换为java http客户端代码以获取数据

android - 如何使用动画 move 和淡出任何 View

未设置 Android 导航 java.language.IllegalStateException fragment 类

java - eclipse 动态 web 项目 - 默认起始页