使用gdbserver和gdb调试代码

涉及到Linux开发,难免要使用gdb调试,在嵌入式开发时,调试板子上的程序,就需要使用gdbserver配合gdb进行调试了。本文仅做简单的记录,以便日后查询用。

 

首先要有gdbserver&gdb调试的环境,即板子上有gdbserver程序,而PC上有对应板子架构的版本的gdb。例如板子是arm架构的,本地则需要使用arm版本的gdb.

 

其次,调试的程序最好不要进行优化,否则调试时会出现各种不适应。如Android环境下,在Android.mk下加入-O0 -g选项,这样的话就很好对比代码了。

 

 

在板子上启动调试的程序,gdbserver boardIP:Port  debugProgram ,例如我这里使用下面的命令来在板子上启动待调试的程序,

gdbserver 172.28.10.59:1234  system/bin/gdbtest

输入命令后,会有类似的提示:

Process system/bin/gdbtest created; pid = 3067

Listening on port 1234

表示系统已经启动了调试的程序,进程为3067,同时gdbserver1234端口启动监听。当我们在PC端连接到该地址和端口时,就可以进行调试了。

注意,这里待调试的程序要用没有经过优化的程序。

 

PC端启动gdb,命令如下gdb debugprogram

如我在本机上进行调试程序的命令如下

arm-linux-androideabi-gdb 

  ../out/target/product/XXX/obj/EXECUTABLES/gdbtest_intermediates/LINKED/gdbtest

可以看出,我调试的是Android平台下的程序,这里我要找到没有优化的可执行文件。

输入上面的命令后,便进入了gdb调试界面,在输入连接到gdbserver的命令前,我们可以做一些设置,如:

1. set solib-search-path ../out/target/product/XXX/symbols/ 该命令用于设置调试过程中需要加载动态库时的查找路径

2. directory      path 该命令用于设置源代码的路径

可能的设置有很多,当然这些设置也可以在连接到gdbserver后再设置。

 

PC端键入target remote IP:Port , 可以连接到板子的gdbserver。例如这里我使用的命令如下

target remote 172.28.10.59:1234

同时,在板子的终端,会出现类似下面的提示,表示有远程调试连接到板子,之后就可以调试了。

Remote debugging from host 172.28.10.2


阅读更多
个人分类: Android Linux
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭