【问题标题】:Android JNI: root-causing deadd00d (dvmAbort)Android JNI:根本原因 deadd00d (dvmAbort)
【发布时间】:2013-01-27 00:54:00
【问题描述】:

对许多 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)

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

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

我也试过用

开启 CheckJNI
adb shell setprop debug.checkjni 1

按照 herehere 的说明,但在杀死并重新启动应用程序时,我没有看到预期的消息

D Late-enabling CheckJNI

而是

D AndroidRuntime: CheckJNI is OFF

使用adb shell getprop 表示该属性确实处于打开状态,所以我不确定那里发生了什么。

【问题讨论】:

    标签: android java-native-interface


    【解决方案1】:

    如果是native crash,可以搜索“b​​acktrace” 它会指出你的原生代码方法崩溃的地方,而不是你应该分析方法,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多