How to Get Ndk-Gdb Working on Android

How to get ndk-gdb working on Android?

You don't need to use -O0 or -g switches.
You need to do one of following:

  1. put android:debuggable="true" to the <application> tag in AndroidManifest.xml file
  2. use NDK_DEBUG=1 after ndk-build
  3. put APP_OPTIM := debug in file

Doing anyone of these three things will automatically use -O0 and -g switches.

Can you try running gdb manually, without gdb script?
It involves following steps:

  1. pushing gdbserver file to /data/local folder on device
  2. running your application & invoking in adb shell following command gdbserver :5055 --attach PID, where PID is your application process id.
  3. running adb forward tcp:5055 tcp:5055 on host
  4. running arm-linux-androideabi-gdb.exe from your app folder
  5. entering following commands in gdb
  6. set solib-search-path obj/local/armeabi
  7. file obj/local/armeabi/
  8. target remote :5055

And see if you can debug then.

If you want see symbols for other shared libraries your library is using like, then pull them from device (from /system/lib folder) to your obj/local/armeabi folder.

Android NDK + GDB

Ok, finally I made it work. The point was in APP_ABI line in There was two ABI's and somehow this confused GDB. Now it works with one abi (I chose armeabi-v7a).

And something, that i also would like to notice

  • there is nothing you really need to do, to make GDB work. Just dont disturb him =)
  • every variable (cflag or manifest tag or etc.) has default value suitable for debugging, but thats no matter and i'll recommend you to explicitly set APP_OPTIM := debug and APP_CFLAG := -g -ggdb -O0 in; android:debuggable="true" in manifest and NDK_DEBUG=1 for ndk-build. I have not figured out if they somehow helps GDB to work better. Some of them are duplicates of each other. And certainly none of them will not do worse.
  • It is normal, when Breakpoint address adjusted
  • NM command. I also did not understand it well, but it keeps giving me zero output on every file that I guessed to check. What is really important - output of info sharedlibrary command in working GDB. Check that for your library has symbols (like my in example above). This is necessary, but not sufficient.

ndk-gdb unable to find gdb.setup

I just answered in the post:

I ran into the same problem. It seems something changed in recent version of Android Build tools.

The trick is:

ERROR: Could not find gdb.setup under ./libs/

It expects gdb.setup is in the directory libs but NOT libs/armeabi

so the simple workground is to copy gdb.setup and gdbserver from "libs/cpu" to "libs" and it works like a magic!

NDK r11b: help needed using the debugger

This issue was posted to the site that Mikhail provided. The issue was assigned and claimed fixed: Resolution will be propagated in NDK r11c;

additionally I updated to R11c. everything is now working

Related Topics

Leave a reply