Introduction
How to debug native code running on emulator/devices? There are some tools both in AOSP and system.image that can be used to achieve the aim.
- device side: /system/bin/gdbserver
- AOSP side : NDK, prebuild/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gdb
The baisc idea is using adb to route gdb command between x86 and android device, below is a rude demonstration:
How to using GDB debugging android
step1: use adb shell ps to list process list, and select which process want to debug, for example android.com.media whose pid=668
# adb shell ps
step2: run gdbserver with a given tcp port, for example port 10000
# adb shell gdbserver :10000 --attach 668
Attached; pid=quit
Listening on port 10000
step3: run adb to forward port 10000 to target devices
# adb forward tcp:5039 tcp:10000 //replace 5039 with the real listen port of adb server
step4: run gdb in NDK
# prebuild/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gdb
step5: connect gdb to gdbserver, run gdb command
(gdb) target remote localhost:5039