我已经使用 Android NDK(在 Windows XP 上,使用 Cygwin)在 Eclipse 中为 native 代码设置了调试,现在我可以在 Java 和 native 代码中设置断点,并且调试器将正确地中断它们。我的问题是,在单步执行 native 代码时,我经常会遇到段错误/SIGILL,而这些错误在继续越过断点时不会发生。
- 我的应用程序是可调试的,如 AndroidManifest.xml 中定义的那样
- 我已更改 (NDK)/build/core/build-binary.mk 以防止它在
APP_OPTIM
被定义为调试时删除调试符号,它位于 Application.mk我的 jni 目录中的文件 - 我在 Android.mk 文件中定义了
LOCAL_CFLAGS := -g -O0
,我也分别尝试了这些标志
我已经读到这个问题与生成的优化代码有关,但是使用 -O0
关闭优化对我的问题没有影响。我在构建时也遇到过使用 NDK_BUILD=1
标志,但是在 AndroidManifest.xml 中定义 debuggable=true
显然具有相同的效果。
我在模拟器(运行 2.3.3)和设备(运行 2.2 - 令人惊讶地没有我预期的线程问题)上都尝试过,结果相似(尽管如果我没记错的话,失败发生在代码的不同点)。
是否有人对我可以尝试的可能修复/步骤有任何见解,和/或能够成功地单步执行 native 代码而没有问题?
非常感谢
编辑:这从来没有真正解决,但任何想看看我的 NDK 调试指南的人,你可以找到它 here .
编辑 2:一旦新版本的 NDK 出来,我就得到了这个问题的答案,现在这个问题可能是多余的。我的指南可能仍然有效,但我有一段时间没有使用 NDK,所以我不能保证它的持续正确性。我已经接受了我的答案,因为这三个人基本上都说同样的话,这是第一个提交的。
最佳答案
如果它适用于 armeabi 而不适用于 armeabi-v7a,这应该是构建问题。解压bin目录下的apk文件,查看armeabi和armeabi-v7a中的库文件是否相同。
关于Eclipse 中的 Android NDK 调试 - 如何停止仅在步入 native 代码时发生的段错误/SIGILL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5899703/