在Eclipse中进行Android NDKdebugging – 如何停止只在使用本机代码时才会出现的segfaults / SIGILL
我已经在Eclipse中设置了使用Android NDK(在Windows XP和Cygwin上)的本地代码的debugging,到了可以在Java和本机代码中设置断点的阶段,debugging器将正确地中断它们。 我的问题是,当通过本机代码的时候,我经常会遇到分段错误/ SIGILL,而不是在经过断点时不会发生。
- 我的应用程序是AndroidManifest.xml中定义的可debugging应用程序
- 我已经改变了(NDK)/build/core/build-binary.mk,以防止在
APP_OPTIM
被定义为debugging时剥离debugging符号,它在我的jni目录下的Application.mk文件中 - 我已经在Android.mk文件中定义了
LOCAL_CFLAGS := -g -O0
,并且我也尝试了每个这些标志
我已经读过,这个问题是关于生成的优化代码,但是使用-O0
closures优化对我的问题没有影响。 在构build时,我也碰到过使用NDK_BUILD=1
标志,但是在AndroidManifest.xml中定义debuggable=true
显然有相同的效果。
我已经在模拟器(运行2.3.3)和设备上运行(运行2.2 – 这令人惊讶的没有我期望的线程问题),类似的结果(虽然如果我没记错的话,失败发生在不同的点代码)。
有没有人对我可以尝试的可能的修补程序/步骤有所了解,并且/或者已经能够顺利地通过本地代码而没有问题?
非常感谢
编辑:这从来没有真正解决,但任何人想看看我的指导NDKdebugging,你可以在这里find它。
编辑2:一旦NDK的新版本出来,我得到这个问题的答案来了,这个问题现在可能是多余的。 我的向导可能仍然有效,但我一直没有使用NDK,所以我不能保证它的持续正确性。 我已经接受了我所有的答案,因为三者基本上都是这样说的,这是第一个提交的答案。
如果它适用于armeabi而不适用于armeabi-v7a,这应该是一个构build问题。 解压bin文件夹中的apk文件,并检查armeabi和armeabi-v7a中的库文件是否一致。
有一件事我注意到,armeabi-v7a在某些设备上debugging本机代码时效果不佳。 尝试只为armeabibuild设,看看是否有帮助。
用-march = armv4编译c ++源文件
在build / core / combo / arm / yourarch.mk中input-march = armv4,然后执行mm -B -com命令来检查它是否被使用。
然后gdbserver可以处理它。