配置GDB+GdbServer远程调试环境

来源:互联网 发布:算法 知乎 编辑:程序博客网 时间:2024/05/17 08:12

心得:查阅了很多资料,这篇博客是对我一天学习的总结,make编译的时候总是出错,修改了配置代码,才勉强解决了编译问题,在安装的时候虽然出现点小错误,但无伤大雅,我需要的文件生成了,arm-linux-gdb, armlinux-run, arm-linux-gdbserver.像arm-linux-gdb 是运行在开发机,又叫宿主机,arm-linux-gdbserver是运行在ARM板上,又叫目标机,当然我们可以用ARM虚拟机代替ARM开发板。最重要的是,我们要在交叉编译环境下,编译安装产生arm-linux-gdbserver.。我们在宿主机上远程调试时,编译产生的可执行文件需要在交叉编译进行,在宿主机上无法运行该执行文件,只能运行在目标机上。在嵌入式开发调试程序时,因为嵌入式设备硬件资源相对有限,在嵌入式设备安装一个gdb调试工具很不现实,所以我们一般采用的是远程调试,gdb在宿主机上,这样就很省资源了。这是我对gdb+gdbserver远程调试的理解,简单描述了一下,希望以后有更深入的理解。

1、本文概述及前期准备工作:

开发板和宿主机需要使用网线联机调试,宿主机运行GDB,目标板运行GDBServer。

宿主机内核版本:Linux 2.6

目标板平台:arm-linux

交叉编译链:arm-linux-gcc

Gdb版本:gdb-7.11

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 zxvf gdb-7.11.tar.gz

3.3、进入到解压目录:cd gdb-7.11/

#./configure --target=arm-linux --prefix=/opt/arm-linux-gdb

其中–target是gdb目标平台,–perfix用来指明安装路径,安装完成之后,可以将此路径加入到环境变量中:进入./bashrc,添加语句export PATH=$PATH:/opt/arm-linux-gdb/bin,即可直接使用。

或者在配置文件/etc/profile 添加PATH=”$PATH:/opt/arm-linux-gdb/bin” 然后 soure /etc/profile,这只是暂时的,系统重启之后就不能

#make#make install

即在刚才指明的安装路径/opt/arm-linux-gdb/bin中生成arm-linux-gdb工具 。

make编译的时候可能会出现以下2种错误:

1、 由于源码不规范导致编译报错。解决方法是:

#./configure --target=arm-linux --disable-werror --prefix=/opt/arm-linux-gdb

用对函数严格的gcc-4.5就会出错,gcc-4.1则不会,屏蔽werror报警。
2、缺少前置文件,安装相关工具
* sudo apt-get install texinfo
* sudo apt-get install libncurses5-dev
* sudo apt-get install m4
* sudo apt-get install flex
* sudo apt-get install bison

4、目标板安装配置GDBserver:

目标板使用的gdbserver需要交叉编译,我所使用的目标板平台为 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 的下载链接:
http://download.csdn.net/download/it_boy__/9931119

由于我这里已经将交叉编译链目录添加到环境变量中,如果出现arm-linux-gcc not found 请使用绝对路径指明交叉编译工具链的位置;
但是这里可能会遇到一个错误,错误的信息如下:
linux-arm-low.c: In function arm_stopped_by_watchpoint':
linux-arm-low.c:642: error:
PTRACE_GETSIGINFO’ undeclared (first use in this function)
linux-arm-low.c:642: error: (Each undeclared identifier is reported only once
linux-arm-low.c:642: error: for each function it appears in.)
错误的信息为:linux-arm-low.c中的一个PTRACE_GETSIGINFO未声明
解决方法如下:
既然这个C文件中没有声明,就去查找一下这个变量位置:
grep
“PTRACE_GETSIGINFO” * -nR
找到如下信息:
……
arm-linux/sys-include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO 0x4202
…….
说明PTRACE_GETSIGINFO是在交叉编译工具链:linux/ptrace.h文件里定义的
于是在linux-arm-low.c加上:#include

5、宿主机+目标板连调:

到目前为止我们需要的工具均已准备完成,可以进行最后的连接工作了;

当然之前我们还需要做一下热身工作:

1、需要使用GDB+GDBServer连调的程序,编译的时候请使用-g 选项;

2、将应用程序copy至宿主机arm-linux-gdb相同目录下:

热身工作完成,现在开始联机调试:

首先在目标板上运行gdbserver <主机IP:端口号> 需要连调的程序名 ,举个小例子:gdbserver 192.168.174.128:1234 test (test是我的示例联调程序) 如果权限不够,请自行chmod
这时打印信息 :

Process test created; pid = 751
Listening on port 1234 即在监听1234端口

切换到宿主机系统:使用./arm-linux-gdb test进入到gdb调试环境中:

GNU
gdb (GDB) 7.11

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.168.174.128:1234 (IP为目标板IP,端口为刚才我们打开的目标板监听端口)

此时
目标终端打印命令:Remote debugging using 192.168.174.128:1234

连接成功!

6、Gdb使用常用命令说明:

GDB的一些常用命令均支持,在此不一一详述。

不过在联调的环境下,运行程序需要使用 “c”而不是“r”

如果运行带参数的程序,请使用 set args 进行参数传递,比如 运行的程序为 ./test -a -b -c 我们需要进行参数传递的格式为set args -a -b-c 再次 “c”;即可

7、参考资料:

维基百科:http://zh.wikipedia.org/wiki/GDB
http://blog.csdn.net/zybasjj/article/details/7490367
http://blog.csdn.net/ce123_zhouwei/article/details/6625486
http://hi.baidu.com/jackywdx/item/dc217bac30f58e706dd45560
http://www.cnblogs.com/papam/archive/2009/11/20/1606873.html
http://liu1227787871.blog.163.com/blog/static/205363197201261204950218/
http://www.360doc.com/content/17/0812/20/46339438_678719873.shtml

原创粉丝点击