栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

编译部署gdb/gdbserver

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

编译部署gdb/gdbserver

配置gdb/gdbserver
  • 1、选择gdbserver源码版本
  • 二、编译gdb
    • 1.创建文件夹
    • 2、输入命令
      • 说明
    • 3、编译
    • 4、安装
  • 三、 编译gdbserver
    • 1、进入路径
    • 2、输入命令
    • 3、编译
    • 4、安装
  • 四、部署gdbserver
    • 测试编译好的gdbserver
    • 1、使用scp拷贝到开发板
    • 2、开发板运行gdbserver
    • 3 、ubuntu 运行gdb
    • 4、开始远端调试


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

经过查阅资料,
主要有两种解决办法可用:

  1. 忽略错误
    主要方法为:
../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 
#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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/320460.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号