2013-04-11 107 views
2

我试图调试我的本机库一段时间了,它不会工作。本地代码工作和编译,但为了优化目的,我真的需要调试本机代码。Android NDK调试:设备无法打开

我已经阅读并遵循了许多教程(例如,tutorial1,tutorial2),但我得到了一些我找不到解决方案的错误。

我已经设置了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. 

[email protected] /cygdrive/c/Development/MyAppAndroid/trunk/MyApp 
$ 

我可以看到gdbserver的成功推出,这是很好的,但我不知道为什么会这样:

Could not open remote device: Invalid argument 

因为adb可以连接到设备(以前测试过)。之后,在我看来(我不太熟悉cygwin),gdb只是关闭了所有东西,这也会让eclipse中的C++ Debug失败。当我运行它,以下错误:

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." 

有没有什么东西可以阻止我的设备由亚行被发现?我一直使用这个设备进行测试(没有C++调试),没有问题。

还是问题在于端口错误?

+0

我使用的方法在你的 “教程1” 的链接,它工作正常(修改armeabi-V7A)。我注意到你正在调用ndk-gdb而不是ndk-gdb-eclipse以及使用gdp.setup而不是gdb2.setup。我想你放弃了教程中的方法?哪部分不适合你? – foo64 2013-04-12 00:07:18

+0

我刚刚复制ndk-gdb并将其命名为ndk-gdb-original,并将它用于我的新文件。与gdb.setup相同。我怀疑这些变化导致了一个问题,但事实并非如此。所以我就像在教程中一样遵循所有步骤。没有工作的部分是**无法打开远程设备:无效的参数**,我不知道为什么它不连接到它,因为在我运行ndk-gdb之前,我可以用_adb设备检测设备_ – user1937376 2013-04-12 06:48:30

回答

3

我有同样的问题,所以我替换NDK-GDB文件下面几行:

原文:

run adb_cmd shell run-as $PACKAGE_NAME lib/gdbserver +$DEBUG_SOCKET --attach $PID & 

替换:

run adb_cmd shell run-as $PACKAGE_NAME lib/gdbserver tcp:5888 --attach $PID & 

原创:

run adb_cmd forward tcp:$DEBUG_PORT localfilesystem:$DATA_DIR/$DEBUG_SOCKET 

取代:

run adb_cmd forward tcp:5039 tcp:5888 

修复了“无效参数”问题。

P.

+0

在我撞倒这个解决方案与另一个建议一起在ndk-gdb脚本中将awk更改为gawk。谢谢你们的帮助。 – user330844 2014-09-03 23:27:02