android下远程GDB调试

来源:互联网 发布:电商美工设计 编辑:程序博客网 时间:2024/05/01 12:30


这里指的是通过PC机端通过GDB可以远程调试目标板(android设备,如手机等)。在4.0版本的android下都会有gdbserver,可以再prebuilt或者out目录下能够找到。而gdb client是在prebuilt中的。

Android下对目标板的GDB调试是基于linux下GDB的调试,其步骤如下。

1 在目标板上启动gdb server,目标板和宿主机是通过TCP协议通信的。而ADB是可以实现这种通信的。利用adbshell进入目标板的shell,然后gdbserver :5039 /system/bin/mediaserver,这个的意思是通过5039端口来监听/system/bin/mediaserver可执行文件。如果成功的话,会显示Process mediaserver created; pid = 4216 Listening on port 5039。这时目标板已经就绪,等待宿主机的连接和控制调试。

gdbserver :5039 /system/bin/mediaserver

2 利用adb打开TCP连接,命令如下:

adb forward tcp:5039 tcp:5039

将宿主机的端口5039和目标板的端口5039相连,实现通信。

3 然后就是利用gdb调试了。注意在宿主机上的可执行程序和目标机上的可执行程序要保持一致,并且在编译的时候利用-g选项参数进行编译,如果想跟踪静态库或者动态库中的执行情况,必须打开所有的调试,将整个工程进行编译。在执行以下命令的时候,注意是在ICS的目录下。

prebuilt/Linux/toolchain-eabi-4.2.1/bin/arm-eabi-gdb  out/target/product/product-name/symbols/system/bin/mediaserver

4 设置参数,solib-absolute-path是设置符号的搜索路径,如果有些库在搜索路径还是找不到的话,有必要设置solib-search-path。

set solib-absolute-prefix /absolute-source-path/out/target/product/product-name/symbols
set solib-search-path /absolute-source-path/out/target/product/product-name/symbols/system/lib

5 连接目标板,当连接成功后,在adb shell下回显示Remote debugging from host 127.0.0.1。此时连接成功,就可以像普通的GDB一样,用continue,next ,step ,list,break等进行调试。

target remote :5039

6 android gdb debug 参考见

http://www.kandroid.org/online-pdk/guide/debugging_gdb.html

原创粉丝点击