您的位置:首页 > 其它

GDBserver远程调试(汇总)

2012-05-17 16:17 309 查看
目标平台:LOONGSON-1B(mips32指令集)

编译环境:ubuntu10.04

编译工具:君正mipseltools-gcc412-gclibc261编译器

编译器下载地址:http://www.ingenic.cn/product.aspx?ID=62

简介

GDBserver远程调试由宿主机GDB和目标机GDBserver共同构成,两者通过TCP连接,使用GDB标准远程串行协议协同工作,实现对目标机上的系统内核或上层应用的监控和调试功能。

进行GDBserver远程调试,目标系统必须包括适合平台的gdbserver程序,宿主机也必须安装gdb程序。一般linux发行版中都有一个可以运行的gdb,但开发人员不能直接使用该发行版中的gdb来进行远程调试,而要获取gdb的源码包,针对目标平台重新编译得到相应的gdb工具。

GDBserver远程调试环境搭建

1、下载gdb源码包

进入网址下载gdb源码包,这里使用gdb-7.3.tar.gz:

http://ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/

2、交叉编译gdb

#tar zxf gdb-7.3.tar.gz

#cd gdb-7.3

#./configure --prefix=/home/Debug_tools/GDB_install --target=mipsel-linux

#make

#make install

#export PATH=/home/Debug_tools/GDB_install/bin:$PATH (可选,设置PATH变量)

在指定目录下生成使用于宿主机的gdb工具mipsel-linux-gdb。

#cd ./gdb/gdbserver

#./configure --prefix=/home/Debug_tools/GDB_install --host=mipsel-linux

#make

#make install

#mipsel-linux-strip /home/Debug_tools/GDB_install/bin/gdbserver (可选,压缩gdbserver体积)

在指定目录下生成使用于目标平台的gdbserver工具。

3、搭建调试环境

这里通过nfs搭建gdb远程调试环境,确保配置好nfs后,搭建gdb远程调试环境具体步骤如下:

(1).将gdbserver放到目标平台,mipse-linux-gdb则放在宿主机使用。

(2).在宿主机,把交叉编译后需要调试的程序(test-app)置于nfs共享目录(/home/xxx/nfsrootfs)下。

(3).在目标平台,挂载宿主机的nfs共享目录:

#mount -o nolock 192.168.x.x:/home/xxx/nfsrootfs /mnt

[192.168.x.x为宿主机ip]

(4).在目标平台,执行gdbserver:

#./gdbserver 192.168.x.x:9000 /mnt/test-app

[192.168.x.x为宿主机ip,9000为监听端口号]

在目标平台可看到如下提示信息:

Process wpa_cli created; pid = 819

Listening on port 9000

表示gdbserver成功运行等待客户端的连接。

(5).在宿主机执行mips-linux-gdb:

#mips-linux-gdb

(gdb)target remote 192.168.x.x:9000

(gdb)symbol-file /home/xxx/nfsrootfs/test-app

(gdb)set solib-absolute-prefix /opt/mipseltool-gcc412-glibc261/mipsel-linux/

(gdb)set solib-search-path /opt/mipseltool-gcc412-glibc261/mipsel-linux/lib/

[192.168.x.x为目标平台ip,9000为目标平台监听端口号]

[/opt/mipseltool-gcc412-glibc261/为编译器路径]

连接成功后在目标平台可看到如下提示信息:

Remote debugging from host 192.168.x.x

此时gdbserver成功运行并与宿主机建立连接关系,等待宿主机的调试信息。

若要避免每次执行mips-linux-gdb都需配置gdb环境,可在宿主机要调试代码目录下,新建.gdbinit文件,该文件在执行mipsel-linux-gdb会自动读取,.gdbinit内容如下:

target remote 192.168.x.x:9000

symbol-file test-app

set solib-absolute-prefix /opt/mipseltool-gcc412-glibc261/mipsel-linux/

set solib-search-path /opt/mipseltool-gcc412-glibc261/mipsel-linux/lib/

备注:

远程调试环境搭建完成后,目标平台gdbserver已处于run状态,宿主机调试不需再执行run,直接continue可运行程序。

共享库在很多交叉和远程调试配置中也是支持的。目标库的一份拷贝需要出现在宿主系统上;他们需要和目标库一样,在这里,目标上的拷贝可以被 strip,而宿主机上的不被 strip。

set solib-absolute-prefix与set solib-search-path命令分别用于设置GDB共享库查找路径前缀与共享库查找路径,以阻止GDB查找宿主机上的库。若不指定这些路径,远程调试过程中GDB加载了宿主机的库,会出现诸如“warning: GDB can't find the start of the function at 0x******”与“Cannot find bounds of current function”等错误提示。

参考资料:

http://www.linuxidc.com/Linux/2011-10/44743.htm

http://wiki.chinaunix.net/GDB_Manual_15_1

/article/10042226.html

/article/9978275.html

/article/8292938.html

转自skyilne的专栏:/article/8689894.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: