gdbserver远程调试和交叉编译gdb

1、交叉编译gdb

1.1下载源码

Gdb源码:wget https://ftp.gnu.org/gnu/gdb/gdb-15.2.tar.xz
Gdb依赖的源码:GMP、MPFR、ncurses(图形库)
GMP源码:wget https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.xz
MPFR源码:wget https://ftp.gnu.org/gnu/mpfr/mpfr-4.2.1.tar.xz
ncurses源码:wget https://ftp.gnu.org/gnu/ncurses/ncurses-6.4.tar.gz

1.2 交叉编译GMP

解压命令
tar xvf gmp-6.3.0.tar.xz
创建脚本,然后执行如图1的脚本

#! /bin/bash
CROSS_COMPILE=“交叉编译工具目录”
SYSROOT="交叉编译头文件和库的目录"
HOST=“目标平台”
PREFIX="安装路径"
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export CFLAGS="--sysroot=${SYSROOT}"
export LDFLAGS="--sysroot=${SYSROOT}"
./configure --host=$HOST --prefix=$PREFIX --disable-shared --enable-static

1.3 交叉编译MPFR

解压命令

tar xvf mpfr-4.2.1.tar.xz
创建脚本,然后执行如图2脚本
#! /bin/bash
CROSS_COMPILE=“交叉编译工具目录”
SYSROOT="交叉编译头文件和库的目录"
HOST=“目标平台”
PREFIX="安装路径"
GMP_PATH=“gmp安装的路径”
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export CFLAGS="--sysroot=${SYSROOT}"
export LDFLAGS="--sysroot=${SYSROOT}"./configure --host=$HOST --prefix=$PREFIX    --with-gmp=$GMP_PATH     --disable-shared --enable-static

1.4 交叉编译ncurses

解压命令
tar xvf ncurses-6.4.tar.gz
创建脚本,然后执行如图3脚本

#!/bin/bash
CROSS_COMPILE=“交叉编译工具目录”
SYSROOT="交叉编译头文件和库的目录"
HOST=“目标平台”
PREFIX="安装路径"
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export LD=${CROSS_COMPILE}ld
export STRIP=${CROSS_COMPILE}strip
export NM=${CROSS_COMPILE}nm
export OBJCOPY=${CROSS_COMPILE}objcopy
export OBJDUMP=${CROSS_COMPILE}objdump
export AS=${CROSS_COMPILE}as
GMP_PATH=“gmp安装路径”
MPFR_PATH=“mpfr安装路径”
./configure \--host=$HOST \--prefix=$INSTALL_PATH \--enable-static \--disable-shared \--without-ada \--without-cxx-binding \--without-tests \--without-progs \--enable-pc-files \--without-debug \--without-develop \--enable-widec \--disable-rpath

1.5 交叉编译gdb

解压命令
tar xvf ncurses-6.4.tar.gz
创建脚本,然后执行如图4脚本

#!/bin/bash
CROSS_COMPILE=“交叉编译工具目录”
SYSROOT="交叉编译头文件和库的目录"
HOST=“目标平台”
PREFIX="安装路径"
# 工具链设置
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export LD=${CROSS_COMPILE}ld
export STRIP=${CROSS_COMPILE}strip
export NM=${CROSS_COMPILE}nm
export OBJCOPY=${CROSS_COMPILE}objcopy
export OBJDUMP=${CROSS_COMPILE}objdump
export AS=${CROSS_COMPILE}as
GMP_PATH=gmp安装路径
MPFR_PATH=mpfr安装路径
NCURSE_PATH=ncurses路径
export CPPFLAGS="-I${NCURSE_PATH}/include -I${NCURSE_PATH}/include/ncursesw -I${GMP_PATH}/include -I${MPFR_PATH}/include"
export LDFLAGS="-L${NCURSE_PATH}/lib -L${GMP_PATH}/lib -L${MPFR_PATH}/lib --sysroot=${SYSROOT}"
export CFLAGS="-fPIC -g -O2 -I${NCURSE_PATH}/include -I${NCURSE_PATH}/include/ncurses"
export CXXFLAGS="-fPIC -g -O2 -I${NCURSE_PATH}/include -I${NCURSE_PATH}/include/ncurses"./configure \
--host=$HOST \
--prefix=$INSTALL_PATH \
--with-sysroot=$SYSROOT \
--enable-tui \
--with-curses  \
--with-gmp=$GMP_PATH \
--with-mpfr=$MPFR_PATH

2 使用步骤

2.1 移植到开发板上

将gdb下的安装目录打包,然后把它移植到开发板上,然后配置环境变量PATH,
export PATH=$PATH:”你的gdb可执行文件路径”。

2.2 gdb远程连接

在板子上启动gdbserver:
命令:gdbserver :端口 可执行程序
在这里插入图片描述

① 在上位机上远程连接:
adb forward tcp:端号口tcp:端口号 (如果是adb连接需要转发如果是远程登录不用执行这一步)
② 执行程序
arm-openwrt-linux-gnueabi-gdb ./plt_if_test
其中arm-openwrt-linux-gnueabi-gdb是交叉编译工具链,plt_if_test是可执行文件,进入界面过后执行远程连接target remote localhost:10000,就可以连接到开发板上了。需要图形界面使用gdb命令ref就可以出现。当连接上gdbserver以后就可以像在本地调试一样使用gdb.

2.3 gdb远程调试

十分推荐远程调试,因为上位机上面有源码可以进行源码级调试,但是在板子上还需要把源码移植到板子上才能进行源码级调试。如果没有源码你会看到下面这种情况,只会显示哪个文件的行号。
在这里插入图片描述
在这里插入图片描述

在远程调试之前,需要在编译源码的时候加上标志-g,这样才能在编译好的可执行文件里面有符号表,才能显示出源码。
如下图所示远程调试步骤,首先打断点到main函数。
在这里插入图片描述
4.4.2 gdbserver调试段错误

在这里插入图片描述
可以看到当发生段错误的时候,在上位机这里面出现了接收到了板子上出现段错误,这时可以看到上面可视化窗口就有段错误出现的地方,也可以用bt full查看调用栈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920372.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5.5模型导入FBX强制x轴向前Force Front XAxis

很多软件轴向都是不同的 , 所以模型导入虚幻的时候 可以勾选Force Front XAxisUE5.5 在右上角设置 点击右上角三个点就可以看到强制前X轴

Docker中如何记录非交互式连接ssh用户操作的所有命令记录?

网罗开发(小红书、快手、视频号同名)大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方…

涡旋场和挠场的对偶性方程组

要将涡旋场与挠场的动态对偶性以麦克斯韦方程组的形式嵌入爱因斯坦-嘉当理论的弯曲时空框架中。一、符号与几何基础1. 基本张量定义 度规张量: g_{\mu\nu} (描述时空弯曲, \mu,\nu 0,1,2,3 )。仿射联络: \Gamma^\la…

8.28日QT

思维导图#include <iostream>using namespace std;int main() {int a0,b0,c0,d0;string i;cout << "请输入一个字符串" << endl;getline(cin,i);int yi.size()-1;while(1){if(a<i[y]&&i[y]<z){aa1;}else if(A<i[y]&&i[y]…

跨网络通信:路由器如何实现全球互联

目录 一、跨网络的两台主机通信 二、采用不同通信标准的两个局域网内的主机通信 三、路由器实现的“认路”功能、数据传输&#xff1a;封装与解封装 四、认识IP地址 五、为什么访问目标主机需要经过路由器&#xff1f; 1、网络划分 2、寻址与转发 六、目的IP地址的核心意…

HTTP 头

HTTP 头&#xff08;HTTP Header&#xff09;是 HTTP 请求/响应中用于传递元数据的关键部分&#xff0c;分为 请求头&#xff08;Request Header&#xff09;、响应头&#xff08;Response Header&#xff09;、通用头&#xff08;General Header&#xff09; 和 实体头&#x…

vue 海康视频插件

背景&#xff1a; 在vue项目中&#xff0c;需要在pc端播放视频&#xff0c;播放的视频包括视频实时、视频回放等。 写文思路&#xff1a; 海康视频对接流程&#xff0c;了解海康视频插件&#xff0c;前端开发项目并引入依赖&#xff0c;前端开发封装的组件&#xff0c;组件的调…

【URP】Unity 插入自定义RenderPass

【从UnityURP开始探索游戏渲染】专栏-直达 自定义渲染通道是一种改变通用渲染管道&#xff08;URP&#xff09;如何渲染场景或场景中的对象的方法。自定义呈现通道(RenderPass)包含自己的Render代码&#xff0c;可以在注入点将其添加到RenderPass中。 添加自定义呈现通道(Rend…

DevSecOps 集成 CI/CD Pipeline:实用指南

就在你以为软件开发已无简化的余地时&#xff0c;新的解决方案应运而生 随着软件开发几乎每天都在攀升&#xff0c;组织不断尝试以前所未有的速度交付新功能和应用程序。虽然持续集成和持续交付 &#xff08;CI/CD&#xff09; Pipeline 彻底改变了软件部署&#xff0c;但它们…

vue2+elementui 表格单元格增加背景色,根据每列数据的大小 颜色依次变浅显示

注释&#xff1a; vue2elementui 表格列实现一个功能&#xff0c;给定两个颜色&#xff1a;红色 #f96d6f 和 绿色 #63be7b&#xff0c;列数据正数时表格单元格背景色为红色&#xff0c;列数据负数时表格单元格背景色为绿色&#xff0c;根据数据的大小颜色依次越来越淡&#xff…

【JavaEE】(19) MyBatis-plus

一、MyBatis Generator 为 MyBastis 框架设计的代码生成工具&#xff0c;简化持久层编码工作。根据数据库表自动生成 Java 实体类、Mapper 接口、SQL 的 xml 文件。让开发者专注于业务逻辑。 1、引入插件 MyBatis 官网搜索 MyBatis Generator 插件&#xff1a;Running MyBatis…

Android之腾讯TBS文件预览

文章目录前言一、效果图二、实现步骤1.去官网注册并创建应用[腾讯官网](https://console.cloud.tencent.com/tbs/client)2.下载arr文件并引入[腾讯TBS](https://download.csdn.net/download/Android_Cll/91764395)3.application实例化4.activity实例化5.下载网络文件6.PreviewA…

基于微信小程序的化妆品成分查询系统源码

源码题目&#xff1a;基于微信小程序的化妆品成分查询系统源码☑️ 文末联系获取&#xff08;含源码、技术文档&#xff09;博主简介&#xff1a;10年高级软件工程师、JAVA技术指导员、Python讲师、文章撰写修改专家、Springboot高级&#xff0c;欢迎高校老师、同行交流合作。毕…

STM32 启动执行逻辑与代码烧入方法详解:从底层原理到实操落地

STM32 启动执行逻辑与代码烧入方法详解&#xff1a;从底层原理到实操落地背景概要STM32启动和执行的核心逻辑链条代码烧入到STM32的途径方法结束语背景概要 在学习STM32时候我们知道代码需要通过一些下载器&#xff08;如ST-Link、J-Link&#xff09;或者串口下载烧入到STM32芯…

Go对接印度股票数据源指南:使用StockTV API

一、StockTV API简介 StockTV提供全球200国家的实时金融数据&#xff0c;覆盖股票、外汇、期货和加密货币市场。针对印度市场&#xff08;国家ID14&#xff09;&#xff0c;其主要优势包括&#xff1a; 毫秒级低延迟响应7x24小时稳定服务日均处理亿级数据免费技术支持 官方资源…

ESP8266:Arduino学习

ESP8266一&#xff1a;环境搭建使用Ardino框架&#xff0c;在官网下载&#xff0c;下载离线的支持包二&#xff1a;实现简单的项目1. 点灯{pinMode(LED_PIN, OUTPUT); // 设置引脚为输出模式digitalWrite(LED_PIN, HIGH); // 点亮 LED}I/O引脚的三种模式分别为&#xff1a;INPU…

青少年软件编程(python六级)等级考试试卷-客观题(2023年3月)

更多内容和历年真题请查看网站&#xff1a;【试卷中心 -----> 电子学会 ----> 机器人技术 ----> 六级】 网站链接 青少年软件编程历年真题模拟题实时更新 青少年软件编程&#xff08;python六级&#xff09;等级考试试卷-客观题&#xff08;2023年3月&#xff09…

mongodb influxdb

、您需要提前配置 MongoDB 和 InfluxDB。让我帮您说明配置步骤&#xff1a; MongoDB 配置 启动 MongoDB 容器后&#xff0c;进入容器创建数据库&#xff1a; # 进入 MongoDB 容器 docker exec -it mongo mongosh -u root -p 123456# 创建 product 数据库 use product# 创建集合…

模拟电路中什么时候适合使用电流传递信号,什么时候合适使用电压传递信号

一、应用 1.实际应用中&#xff0c;需要进行权衡&#xff0c;比如抗干扰能力&#xff0c;传输距离&#xff0c;功耗 2.电压信号比较容易受到干扰&#xff0c;对噪声比较敏感&#xff0c;有噪声容限一说 3.电流信号对噪声不敏感 4.电源电压下降的稳定性或者长距离传输中的损耗问…

Flink2.0学习笔记:使用HikariCP 自定义sink实现数据库连接池化

stevensu1/EC0823: Flink2.0学习笔记&#xff1a;使用HikariCP 自定义sink实现数据库连接池化 在 Flink 流处理应用中使用 HikariCP 实现数据库连接池化&#xff0c;对于写入关系型数据库&#xff08;如 MySQL、PostgreSQL&#xff09;的 自定义 Sink 来说&#xff0c;不仅是推…