Android的JNI:导致deadd00d(dvmAbort)

对一些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) 

然后评论说在你的日志中查看问题的更早。 我在找什么 – 有没有特定的标签或string来search? (dalvikvm也许?)我滚动了许多页面的日志,没有发现任何相关的 – 是正常的,还是应该是在错误之前?

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

我也试着打开CheckJNI

 adb shell setprop debug.checkjni 1 

按照这里和这里的说明,但是当杀害和重新启动应用程序,我没有看到预期的消息

 D Late-enabling CheckJNI 

反而

 D AndroidRuntime: CheckJNI is OFF 

使用adb shell getprop指示属性确实在打开,所以我不确定那里发生了什么。

Solutions Collecting From Web of "Android的JNI:导致deadd00d(dvmAbort)"