我有一个C++的Android应用程序,我正在尝试使用ndk-gdb进行调试。该应用程序确实使用了多线程,但据说ndk的r5版本支持多线程。而且,我甚至没有达到gdb启动的那一步。我运行了以下命令:
ndk-gdb --start --force --verbose
然后它会找到ndk和sdk(或至少adb)的正确路径,以及所需的ABI等。
$ ndk-gdb --start --force --verbose
Android NDK installation path: /home/leif/eclipse/android-ndk-r5b
Using default adb command: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.26
Using final ADB command: '/home/leif/eclipse/android-sdk-linux_86/platform-tools/adb'
Using auto-detected project path: .
Found package name: net.leifandersen.mobile.android.marblemachine
ABIs targetted by application: armeabi
Device API Level: 10
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi
然后它寻找gdb服务器,并找到了它,包括正确的PID,然后启动活动。
但是接下来,它告诉我找不到该包:
Setup network redirection
## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb shell run-as <package name> lib/gdbserver +debug-socket --attach 16040
## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb forward tcp:5039 localfilesystem:run-as: Package '<package name>' is unknown/debug-socket
然后它会输出您如果错误使用adb(帮助文件)时将获得的内容,接下来是:
ERROR: Could not setup network redirection to gdbserver?
Maybe using --port=<port> to use a different TCP port might help?
run-as: Package '<package name>' is unknown
我查看了 /data/system/packages.list 文件,我的 apk 明确在其中,并且它指向的位置在文件系统中也是正确的,所以这不是问题所在。
这篇教程:http://vilimpoc.org/blog/2010/09/23/hello-gdbserver-a-debuggable-jni-example-for-android/ 建议删除并重新安装,以及清理你的 Eclipse 构建。
我没有使用 Eclipse 来构建包,但我确实将所有东西都清空了并从头开始编译、删除和重新安装,但仍然没有运行成功。
有人遇到类似的问题吗?你是如何解决的?谢谢。
编辑:哦,我尝试了不同的端口,但没有用,5039 端口上好像没有任何内容。据我所知,我没有任何防火墙阻止该连接,我也在 Ubuntu 11.04 上进行开发。
编辑2:嗯……看起来使用新的 NDK(r5c)后,错误消息也发生了改变:
ERROR: Could not extract package's data directory. Are you sure that
your installed application is debuggable?
是的,在清单文件中将debuggable设置为true,并且所有本地代码都使用以下方式构建:
LOCAL_CFLAGS := -Wall -g
LOCAL_LDFLAGS := -Wl,-Map,xxx.map