我现在正在尝试调试我的本机库一段时间,但它不起作用。本机代码可以工作并编译,但出于优化目的,我确实需要调试本机代码。
我已经阅读并遵循了许多教程(例如教程1 http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-debugging/, 教程2 http://www.doc.ic.ac.uk/~cb908/Android%20NDK%20Debugging.pdf)一步一步,但我遇到一些错误,我找不到解决方案。
我已经设置了 Android 和 C++ 调试配置,在使用 Android 调试配置进行调试后,它在加载库后到达断点(只有一个)。我转到 cygwin 并查看是否检测到我的设备(确实如此)。然后运行:
$ ndk-gdb --start --verbose
这给了我以下输出:
Android NDK installation path: /cygdrive/c/Android/android-ndk/android-ndk-r8
Using default adb command: /cygdrive/c/Android/android-sdk/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.29
Using ADB flags:
Using auto-detected project path: .
Found package name: com.mypackage
ABIs targetted by application: armeabi-v7a
Device API Level: 15
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi-v7a
Using gdb setup init: ./libs/armeabi-v7a/gdb.setup
Using toolchain prefix: /cygdrive/c/Android/android-ndk/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-
Using app out directory: ./obj/local/armeabi-v7a
Found debuggable flag: true
Found device gdbserver: /data/data/com.mypackage/lib/gdbserver
Found data directory: '/data/data/com.mypackage'
Found first launchable activity: .MainActivity
Launching activity: com.mypackage/.MainActivity
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell am start -n com.mypackage/.MainActivity
Starting: Intent { cmp=com.mypackage/.MainActivity }
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell sleep 2
Found running PID: 6907
Launched gdbserver succesfully.
Setup network redirection
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell run-as com.mypackage lib/gdbserver +debug-socket --attach 6907
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb forward tcp:5039 localfilesystem:/data/data/com.mypackage/debug-socket
Attached; pid = 6907
Could not open remote device: Invalid argument.
Detaching process(es): 6907
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb pull /system/bin/app_process obj/local/armeabi-v7a/app_process
2405 KB/s (9852 bytes in 0.004s)
Pulled app_process from device/emulator.
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb pull /system/lib/libc.so obj/local/armeabi-v7a/libc.so
4994 KB/s (286412 bytes in 0.056s)
Pulled libc.so from device/emulator.
User@This-PC /cygdrive/c/Development/MyAppAndroid/trunk/MyApp
$
我可以看到gdbserver已成功启动,这很好,但我不知道为什么会发生这种情况:
Could not open remote device: Invalid argument
因为 adb 可以连接到设备(如之前测试的)。之后,在我看来(我不太熟悉 cygwin)gdb 只是关闭了所有内容,这也会使 eclipse 中的 c++ 调试失败。当我运行它时,出现以下错误:
76-target-select remote localhost:5039
&"Remote communication error: Bad file descriptor.\n"
Remote communication error: Bad file descriptor.
76^error,msg="Remote communication error: Bad file descriptor."
有什么可以阻止 adb 检测到我的设备吗?我一直使用这个设备进行测试(没有c++调试),没有任何问题。
或者问题出在端口错误上?