2

I am trying to debug my native library for some time now and it just won't work. The native code works and compiles but for optimization purposes I would really need to debug the native code.

I have read and followed many tutorials (e.g. tutorial1, tutorial2) step by step but I get some errors that I can't find a solution for.

I have set up the Android and C++ debug configuration and after I debug with the Android debug configuration it hits the breakpoint after loading the library (only one). I go to cygwin and see if my device is detected (which it is). Then run:

$ ndk-gdb --start --verbose

Which gives me the following output:

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
$

I can see that the gdbserver has been launched successfully, which is good, but I don't know why this happens:

Could not open remote device: Invalid argument

because adb can connect to the device (as tested before). After that it seems to me (I am not too versed with cygwin) that gdb just closes everything and that would make the c++ Debug in eclipse fail as well. When I run it, the following error:

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

Is there anything that could prevent my device from being detected by the adb? I use this device for testing (without c++ debugging) all the time without problem.

Or does the problem lie in the port error?

4

1 回答 1

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。

于 2013-06-05T08:54:33.247 回答