配置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':
PTRACE_GETSIGINFO’ undeclared (first use in this function)
linux-arm-low.c:642: error:
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
- 配置GDB+GdbServer远程调试环境
- 配置GDB+GdbServer远程调试环境
- gdbserver + gdb 远程调试
- gdb+gdbserver远程调试技术
- eclipse gdb gdbserver 远程调试
- GDB+Gdbserver ARM远程调试
- arm-linux-gdb+gdbserver环境搭建以及远程调试
- arm-linux-gdb+gdbserver环境搭建以及远程调试
- gdb调试及gdbserver远程调试
- uclinux使用gdb和gdbserver远程调试
- 用gdb和gdbserver远程调试tq2440
- 远程调试应用程序之gdb+gdbserver
- GDB+gdbserver 远程调试android native code
- GDB + gdbserver 远程调试android native code
- 交叉编译gdb+gdbserver实现远程调试
- gdb + gdbserver 远程调试(应用程序)
- arm远程调试 gdb和gdbserver
- arm-linux-gdb+gdbserver环境搭建以及远程调试 及调试core文件
- ubuntu14.04安装jdk和eclipse
- 工作中小细节总结(一)
- 【HPUOJ1413】StarFarming 【最短路】
- python下多线程简单代码示例
- 关于python3的编码问题
- 配置GDB+GdbServer远程调试环境
- Scala学习之一函数式编程进阶
- 磁盘调度算法
- mycat小白分片初体验
- Activity那些事
- 搬瓦工VPS+LNMP+Wordpress快速搭建个人网站
- 训练日记-11
- 博客搬家
- Python 爬虫个人记录(一)豆瓣电影250