zeerd's blog         Search     Categories     Tags     Feed

闲来生雅趣,无事乐逍遥。对窗相望雪,一盏茶香飘。

使用gdb调试jni的方法

#GDB @Android


Contents:
1、首先需要安装gdbserver。Android默认的make是不包含 gdbserver的,需要手动安装:

cd codes/prebuilts/misc/android-arm/gdbserver
mm

2、在调试版的环境下运行gdbserver。假定测试程序的名称是test:

gdbserver :[调试端口] test
成功的话会显示类似下面的提示:
Process /system/bin/test created; pid = xxx
Listening on port yyyy

3、在linux机器上运行gdb进行调试:

1)命令类似如下,具体的路径请自行调整。注意,后面的可执行文件要使用LINKED目录下面的。只有这个是附带debug信息的。
codes/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/arm-eabi-gdb out/target/product//obj/EXECUTABLES/test_intermediates/LINKED/test

2)进入dbg环境之后,设置环境参数。同上,具体路径请自行调整(安全起见,建议适用绝对路径):
set sysroot out/target/product//symbols/
set solib-search-path out/target/product//symbols/system/lib

3)运行程序,命令如下:
(gdb)target remote [调试机IP]:[调试端口]
如果成功,则gdb会停在下面的提示状态:
__dl__start () at bionic/linker/arch/arm/begin.S:35
35              mov     r0, sp

此时,输入Continue命令:
(gdb) c

至此,如果一切顺利,程序就会开始执行了。