目标平台: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
http://blog.csdn.net/j6915819/article/details/6673127
http://blog.csdn.net/lwsogood/article/details/3509400
http://blog.csdn.net/wzwind/article/details/6332879
转自skyilne的专栏:http://blog.csdn.net/water_cow/article/details/7393125