1、本文概述及前期准备工作:
开发板和宿主机需要使用网线联机调试,宿主机运行GDB,目标板运行GDBServer。
宿主机内核版本:Linux 2.6
目标板平台:arm-linux
交叉编译链:arm-linux-gcc
Gdb版本:Gdb 7.4
2、Gdb,GdbServer介绍:
gdb介绍:参见维基百科:http://zh.wikipedia.org/wiki/GDB
gdbserver:http://en.wikipedia.org/wiki/Gdbserver
3、宿主机如何配置GDB:
3.1、下载: http://ftp.gnu.org/gnu/gdb/ 选择相应的GDB版本
3.2、解压:tar jxvf gdb-7.4.tar.bz2
3.3、进入到解压目录:cd gdb-7.4/
#./configure --target=arm-linux --prefix=/usr/local/arm-gdb –v
其中--target是gdb目标平台,--perfix用来指明安装路径,安装完成之后,可以将此路径加入到环境变量中:
进入./bashrc,添加语句export PATH=$PATH:/usr/local/arm-gdb/bin,即可直接使用。
#make
#make install
即在刚才指明的安装路径/usr/local/arm-gdb/bin中生成arm-linux-gdb工具 。
4、目标板安装配置GDBserver:
目标板使用的GDBSServer需要交叉编译,我所使用的目标板平台为 arm-linux;
4.1 首先进入 gdb目录下的gdbserver目录中,即:cd gdb/gdbserver/
4.2 在此目录下,配置 ./configure --target=arm-linux --host=arm-linux
--target=arm-linux表示目标平台,--host表示主机端运行的是arm-linux-gdb
#make CC=arm-linux-gcc 由于我这里已经将交叉编译链目录添加到环境变量中,如果出现arm-linux-gcc not found 请使用绝对路径指明交叉编译工具链的位置;
但是这里可能会遇到一个错误,错误的信息如下:
5、宿主机+目标板连调:
到目前为止我们需要的工具均已准备完成,可以进行最后的连接工作了;
当然之前我们还需要做一下热身工作:
1、需要使用GDB+GDBServer连调的程序,编译的时候请使用-g 选项;
2、将应用程序copy至宿主机arm-linux-gdb相同目录下:
热身工作完成,现在开始联机调试:
首先在目标板上运行gdbserver <主机IP:端口号> 需要连调的程序名 ,举个小例子:gdbserver 192.192.192.105:1234 test (test是我的示例联调程序) 如果权限不够,请自行chmod
这时打印信息 :
Process test created; pid = 751
Listening on port 1234 即在监听1234端口
切换到宿主机系统:使用./arm-linux-gdb test进入到gdb调试环境中:
GNU gdb (GDB) 7.4
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i386-pc-linux-gnu --target=arm-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from test...done.
这时,我们需要使用远程调试的命令:
(gdb) target remote 192.192.192.200:1234 (IP为目标板IP,端口为刚才我们打开的目标板监听端口)
此时 目标终端打印命令:Remote debugging using 192.192.192.105:1234
连接成功!
6、Gdb使用常用命令说明:
GDB的一些常用命令均支持,在此不一一详述。
不过在联调的环境下,运行程序需要使用 “c”而不是“r”
如果运行带参数的程序,请使用 set args 进行参数传递,比如 运行的程序为 ./test -a -b -c 我们需要进行参数传递的格式为set args -a -b-c 再次 “c”;即可