其实网上有很多类似的文章,但是你会发现几乎都不可重现,要么是细节没讲清楚,要么是压根自己没有真正去试过。这里,我仅给出自己用gdb和gdbserver调试android native code的实际过程,希望对大家有用。
注:以调试mediaserver进程为例.
第一步:你需要下载android,以debug方式编译,并以生成的image起模拟器或者设备。
第二步:你需要从“http://developer.download.nvidia.com/tegra/files/tegra-gdb-20100430.zip”下载一个gdb,覆盖到android源码中gdb对应的位置。
第三步:adb shell到设备,并起gdbserver侦听目标进程:
adb shell
gdbserver :5039 /system/bin/mediaserver
第四步: 建立pc机和设备的消息连接:
adb forward tcp:5039 tcp:5039
第五步: 使用gdb调试目标进程:
cd android_src
prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gdb out/debug/target/product/generic/symbols/system/bin/mediaserver
第六步: 设置符号表:
set solib-absolute-prefix /your_android_src_path/out/debug/target/product/generic/symbols
set solib-search-path /your_android_src_path/out/debug/target/product/generic/symbols/system/lib
第七步: 使gdb和gdb server建立连接:
target remote :5039
第八步: ok. 现在可以使用gdb的命令进行调试,譬如next/break/step/info thread等