在开发包含c/c++本地代码的android项目中,通过gdb来调试代码是必不可少的前提。
android官方为此提供了ndk-gdb,看起来非常之nice。但个人在实践中发现还是有一系列问题需要记载下(ndk版本:r10e):
-
ndk-build NDK_DEBUG=1这个选项编译时要加上,一般将之定制在你的c/c++ builder中
-
即便你按照1)做了,在项目根目录运行ndk-gdb的时候还是会报以下错误:
ERROR: Package faywong.github.io.mediakit is not debuggable ! You can fix that in two ways:
-
Rebuilt with the NDK_DEBUG=1 option when calling 'ndk-build'.
-
Modify your manifest to set android:debuggable attribute to "true",
then rebuild normally.
After one of these, re-install to the device!
然后我们乖乖地跑到AndroidManifest.xml里边去修改Application标签的debuggable属性,eclipse会提示你不能hardcode,可以通过如下方式设置下:
QQ20151012-1
- 接下来还有可能会遇到如下问题:
ERROR: Could not find gdb.setup under ./libs/
这是由于ndk-gdb命令的bug带来的,它没有去参照ABI的不同设置去不同的目录下找gdb.setup文件(是一个脚本文件,帮你做一些繁琐的gdb server的启动,gdb client的启动和设置等任务)。
简单绕过这个错误的方式是将libs/{your abi, e.g. armeabi-v7a}里的gdb.setup直接拷贝至libs目录下
- 在你跋山涉水,翻山越岭走了这么久之后,再次运行ndk-gdb,会出现以下惊喜:
ERROR: Non-debuggable application installed on the target device.
Please re-install the debuggable version!
更新
现在可以结合gradle-experimental插件和ndk中搭载的lldb + android studio 2.0断点native代码了,虽然还不那么完善,bug多多,但是相比过去的ndk-gdb时代还是进步一点了。
标题:ndk-gdb时提示应用不可调试的解决方法
作者:faywong8888
地址:https://blog.fay.wang/articles/2025/08/10/1754806340671.html