在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 ,并且我也尝试了每个这些标志

我已经读过,这个问题是关于生成的优化代码,但是使用-O0closures优化对我的问题没有影响。 在构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可以处理它。