我一直在调试模式下运行并测试我的Android原生应用程序数周而没有问题。今天,我决定在发布模式下测试它,在android清单中选择“debuggable”为“false”,并使用ant release install来构建。
但是,当我尝试运行我的应用时,收到如下错误消息:
I / DEBUG(264):信号7(SIGBUS),代码1(BUS_ADRALN),故障地址5c27f389
我假设是数据对齐错误(根据谷歌)。但是一旦我打开debuggable,应用程序就不会再崩溃了。
可能导致此错误的原因是什么?我甚至不确定从哪里开始看,因为崩溃只发生在我关闭debuggable时。
答案 0 :(得分:0)
SIGBUS类似于SIGSEGV,因为它是由非法内存访问引起的。打开调试时,会使用更大的内存块,使这些问题变得不那么明显。它并不意味着调试版本中不存在该错误,它只是意味着它没有导致崩溃。你可能会得到一个讨厌的内存腐败。
您遇到崩溃,导致崩溃转储。在崩溃转储中,您将获得一个地址和.so文件的调用堆栈。
通过使用地址和模块调用addr2line,您可以找到地址正在使用的功能。如果你想要一个完整的反汇编,可以使用objdump。您将要么安装这些程序的arm版本,要么使用android NDK中的那些程序。