配置gdb/gdbserver
1、选择gdbserver源码版本
首先打开工具包自带工具链目录,发现其中已经提供了已经编译好的gdb,经过测试可以用,所以只需要编译gdbserver即可,但是gdb需要和gdbserver版本进行匹配,否则会出问题。直接执行,查看工具链中gdb版本。这里版本为8.2.1 。前往下载地址:[添加链接描述](http://ftp.gnu.org/gnu/gdb/)这里我们下载的是gdb-8.2.1.tar.gz这个版本,下载完解压即可。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/fc3e32c44fc84fb08ce117dd0b436b1c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARHJlQ29kZXI=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)二、编译gdb
1.创建文件夹
进入gdb源码目录,使用 mkdir build
命令创建build文件夹。
2、输入命令
../configure --target=arm-linux-gnueabihf --prefix=/home/xueya/GDBSouceCode/gdb/
生成Makefile文件,生成图如下。
说明
–target: 目标平台
–prefix:安装路径
3、编译
输入make
执行编译
4、安装
输入 make install
安装,执行完make install 会在安装路径下的bin文件夹下生成编译好的gdb文件。
但是编译过程中遇到报错
recipe for target ‘gdb.info’ failed
经过查阅资料,
主要有两种解决办法可用:
- 忽略错误
主要方法为:
../configure --target=arm-linux-gnueabihf --prefix=/home/xueya/GDBSouceCode/gdb/ --disable-werror
加--disable-werror
原因为:原因是比较新的编译器如gcc4.5 以上的编译器,对 #define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = bool), TRUE) 这样的语法不支持,解决方法是加上忽略告警的选项 。
编译过程中还会报错,但是在安装目录下不影响生成编译好的gdb文件。
2. 安装texinfo
查找资料,很多人都遇到这个问题,网上经验,安装
texinfo即可解决,本次编译采用这个方法。
sudo apt install texinfo
编译完成不会报错。
三、 编译gdbserver
1、进入路径
进入gdb源码目录,
输入
cd /gdb/gdbserver
进入gdbserver源码目录。
2、输入命令
./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf
3、编译
一开始,只指定了GCC
make CC=/root/work/build/Project/BMCBase2600/development/tools/arm-soft-linux-gnueabi/bin/arm-soft-linux-gnueabi-gcc
编译过程中,会遇到报错如下:
经过查找资料,在工具链下,查找/asm/unistd目录下已经对__NR_sigreturn进行定义,按照方法,对报错文件进行处理,具体为linux-arm-low.c
在文件开始位置添加
#ifndef __NR_sigreturn
#include <asm/unistd.h>
#endif
输入
make clean
重新进行编译,发现还是同样错误。
再次经过查阅资料,发现是g++编译器的问题
再次修改命令,指定g++编译器,需要说明的是,该命令均需要输入绝对路径。
make CC=/root/work/build/Project/BMCBase2600/development/tools/arm-soft-linux-gnueabi/bin/arm-soft-linux-gnueabi-gcc CXX=/root/work/build/Project/BMCBase2600/development/tools/arm-soft-linux-gnueabi/bin/arm-soft-linux-gnueabi-g++
再次 编译,顺利通过编译,在当前目录下会生成gdbserver这个文件。
4、安装
因为gdbserver需要发送到开发板,所以不需要安装。
四、部署gdbserver
通过SCP 将gdbserver发送到开发板,同时在ubuntu中编写测试程序,注意编译过程中需要加 -g参数
-g
编译成功后,将可执行文件也通过SCP发送到开发板。
测试编译好的gdbserver
执行
./gdbserver --version
有版本信息说明可用。
1、使用scp拷贝到开发板
1、window下可通过dos命令窗口,也可下载winscp软件,软件非常方便。
2、linux 下使用scp,将本地文件发送到开发板
SCP格式
scp 【常用参数 【-P 指定端口号】【-r 拷贝文件夹需要加】】 开发板的用户名@开发板的IP:开发板需要拷贝到的路径
在使用scp中,遇到连接不上的问题,后来经过指导,发现是公司都是用的串口服务器,在连接开发板时,使用的IP和端口号都是串口服务器的IP,需要到开发板上,输入ifconfig命令查看开发板的ip,才可以。
2、开发板运行gdbserver
./gdbserver ubuntuIP:8989 gdbtest
端口号只要没用过的就可以,不要选择比较特殊的常用端口号。这里的ip为ubuntu的IP
3 、ubuntu 运行gdb
如gdb未添加到环境变量,则需要输入gdb所在路径,指定编译好的测试可执行程序
/home/gdb/arm-none-linux-gnueabi-gdb gdbtest
等待进入gdb调试界面,输入
target remote 开发板IP:8989
端口号需要一样
4、开始远端调试
设置断点在第9行,输入c则每次停在断点处
开发吧打印信息如下:
![(https://img-blog.csdnimg.cn/023c0b51711e480e98b74daa4a14b82d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARHJlQ29kZXI=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)