1、http://ftp.gnu.org/gnu/gdb/ 下载gdb。gdb-7.6.2.tar.gz
2、编译gdb
$ tar xzvf gdb-7.6.2.tar.gz
$ cd gdb-7.6.2
$ ./configure --target=arm-linux --prefix=$PWD/bin
$ mkdir bin
$ make
$ make install
安装成功后主要是会在/tianpei/share/arm-gdb/bin下生成三个工具分别是:
arm-linux-gdb arm-linux-gdbtui arm-linux-run
这几个工具是在PC端运行。
3、编译gdbserver
$cd gdb/gdbserver/
$./configure --target=arm-linux --host=arm-linux-gnueabihf --prefix=$PWD/bin
$ mkdir bin
$make
$make install
安装成功后会生成文件:
$PWD/bin/arm-linux-gdbserver
注意:gdbserver 是在板子上运行的,注意设置--host为交叉编译工具
4、调试
1 arm-linux-gdbserver工具下载到开发板的/bin下
2、PC编译实例
编译: $arm-linux-gcc -g hello.c -o hello
1、 配制gdbserver
设置主机IP地址为:192.168.1.10,开发板系统IP地址为:192.168.1.230
在开发板中:
#gdbserver 192.168.1.230:1234 hello
Process test created:pid=80 //使gdbserver在1234端口监听。
在PC中运行 arm-linux-gdb:
#arm-linux-gdb
(gdb) target remote 192.168.1.230:1234 //若链接成功,开发板的串口终端会显示如下:
Remote debugging from host 192.168.1.10
(gdb) symbol file hello //此处的hello是PC机上的所在路径的hello
(gdb) list
(gdb) break 5
//==================================
如果gdb提示:GDB7.6 Remote 'g' packet reply is too long
修改gdb/remote.c文件,屏蔽process_g_packet函数中的下列两行:
if (buf_len > 2 * rsa->sizeof_g_packet)
error (_(“Remote ‘g’ packet reply is too long: %s”), rs->buf);
在其后添加:
if (buf_len > 2 * rsa->sizeof_g_packet) {
rsa->sizeof_g_packet = buf_len ;
for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
{
if (rsa->regs[i].pnum == -1)
continue;
if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
rsa->regs[i].in_g_packet = 0;
else
rsa->regs[i].in_g_packet = 1;
}
}