8

对许多 StackOverflow 问题的评论指出,deadd00d 的故障地址表示 VM 故意中止。

I DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d

事实上,当通过 ndk-stack 运行日志时,我看到堆栈帧的顶部解码为:

Stack frame #00  pc 00050b0e  /system/lib/libdvm.so (dvmAbort)

然后评论说要在您的日志中更早地查看问题。我到底在寻找什么——是否有特定的标签或字符串要搜索?(也许是dalvikvm?)我滚动浏览了很多页的日志,但没有找到任何相关的东西——这正常吗,还是应该在故障发生之前?

deadd00d 最常发生在对 GetObjectClass() 的特定调用中。我曾尝试在该行之前立即调用 env->ExceptionCheck ,但它没有报告任何先前的错误。

我也试过打开 CheckJNI

adb shell setprop debug.checkjni 1

根据此处此处的说明,但是在杀死并重新启动应用程序时,我没有看到预期的消息

D Late-enabling CheckJNI

反而

D AndroidRuntime: CheckJNI is OFF

Usingadb shell getprop表示该属性确实已打开,因此我不确定那里发生了什么。

4

1 回答 1

0

如果是原生崩溃,你可以搜索“回溯”,它会指向你原生代码方法崩溃的地方,而不是你应该分析方法,

于 2014-10-07T09:15:26.353 回答