android - 为什么在 android list 中关闭 debuggable 会导致数据对齐错误?

标签 android c++ native

我已经在 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/

相关文章:

java - 带有芯片的 Android AutoCompleteTextView

java - 谷歌地图显示空白屏幕,左下角有 'Google' 标志

java - 跟踪 Canvas 上的点的最佳方法

android - 将 viewModel 观察者放在 dialogFragment 的什么位置?

c++ - 此代码行为是否定义明确?

c++ - CodeLite 未指定可执行文件,使用 'target exec' 错误

c# - .NET Web 应用程序中的 native 依赖项未加载

C++如何使用相同的类和方法来读取/写入可变大小的数据

java - 如何为不受信任的应用程序运行创建沙箱?

java - 如何制作包含DLL的Jar?