我已经在 Debug模式下运行和测试我的 Android native 应用程序数周了,没有出现任何问题。今天,我决定通过在 android list 中将“debuggable”选择为“false”并使用 ant release install 构建来在 Release模式下对其进行测试。
但是,当我尝试运行我的应用程序时,我收到如下错误消息:
I/DEBUG ( 264): 信号 7 (SIGBUS),代码 1 (BUS_ADRALN),故障地址 5c27f389
我认为这是数据对齐错误(根据谷歌)。但是一旦我打开可调试功能,应用程序就不再崩溃。
是什么导致了这个错误?我什至不确定从哪里开始查看,因为只有在我关闭可调试时才会发生崩溃。
最佳答案
SIGBUS 与 SIGSEGV 类似,也是由非法内存访问引起的。当调试打开时,使用更大的内存块使这些问题不那么明显。这并不意味着该错误在调试版本中不存在,它只是意味着它没有导致崩溃。相反,您可能会遇到严重的内存损坏。
你遇到了崩溃,所以你得到了故障转储。在故障转储中,您将获得地址调用堆栈和 .so 文件。
您可以通过使用地址和模块调用 addr2line 来找到地址正在使用的函数。如果你想要一个完整的反汇编,可以使用 objdump。您要么必须安装这些程序的 arm 版本,要么使用 android NDK 中的程序。
关于android - 为什么在 android list 中关闭 debuggable 会导致数据对齐错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474294/