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?

user1937376
  • 21
  • 1
  • 4
  • I use the method in your "tutorial 1" link and it works fine (modified for armeabi-v7a). I noticed you're invoking ndk-gdb and not ndk-gdb-eclipse as well as using gdp.setup instead of gdb2.setup. I suppose you abandoned the method in the tutorial? What part of it wasn't working for you? – foo64 Apr 12 '13 at 00:07
  • i just copied ndk-gdb and named it ndk-gdb-original and used the name as it was for my new file. same with gdb.setup. i was suspecting those changes to cause a problem but it wasnt that. so ive followed all the steps just like in the tutorials. the part that isnt working is **Could not open remote device: Invalid argument** and i dont know why it isnt connecting to it because before i run ndk-gdb i can detect the device with _adb devices_ – user1937376 Apr 12 '13 at 06:48

1 Answers1

3

I had same problem so I replaced the following lines in ndk-gdb file :

Original:

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

Replaced:

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

And Original:

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

Replaced:

run adb_cmd forward tcp:5039 tcp:5888

which is fixed the "Invalid argument" problem.

P.

Tade
  • 41
  • 4
  • After pounding my head against the screen for weeks, this solution worked along with another suggestion to change awk to gawk in the ndk-gdb script. Thank you both for your help. – user330844 Sep 03 '14 at 23:27