VsCode + gdb + gdbserver远程调试arm嵌入式linux C/C++程序

news2024/9/25 1:25:35

基本流程跟我的另一篇文章《VsCode + gdb + gdbserver远程调试C++程序》一样,不一样的是需要重新编译gdb和交叉编译gdbserver。

一、准备工作

sudo apt install libgmp-dev

如果不安装,编译gdb时可能会报错:configure: error: GMP is missing or unusable

由于我的嵌入式交叉编译工具链在/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/platform/buildroot/output/rockchip_rk3568_itc/host/bin下。

所以设置环境变量:

su
vim /etc/bash.bashrc

在最后一行添加:

export PATH=$PATH:/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/platform/buildroot/output/rockchip_rk3568_itc/host/bin

执行命令使环境变量生效:

source /etc/bash.bashrc

执行上述命令成功后如果执行:

echo $PATH

控制台输出有刚刚配置的编译链路径,则表明环境变量设置成功了。

继续执行命令:

aarch64-buildroot-linux-gnu-gcc -v

正常会显示当前安装版本编号

二、下载编译gdb

Index of /gnu/gdb 下载最新的gdb源码。比如:gdb-12.1.tar.gz。

tar -xzvf gdb-12.1.tar.gz
cd gdb-12.1
./configure --target=aarch64-buildroot-linux-gnu --prefix=/home/lwf/workplace3/lib/gdb/gdb-12.1/install
make
make install

注意这里因为我的编译工具链是aarch64-buildroot-linux-gnu,所以configure的时候加的target选项是--target=aarch64-buildroot-linux-gnu。如果你的工具链是其它则configure的时候要同步修改。

完成后可以看到在/home/lwf/workplace3/lib/gdb/gdb-12.1/install目录下生成了可执行文件aarch64-buildroot-linux-gnu-gdb。注意等下远程调试的时候这个gdb是运行在我们虚拟机(本机)的linux上的。我们先把这个aarch64-buildroot-linux-gnu-gdb备份到别的目录。

二、编译gdbserver

首先得交叉编译gmp。到官网https://gmplib.org/index 下载最新的gmp源码

 

执行命令:

apt-get install lzip
lzip -k -d gmp-6.2.1.tar.lz
tar xvf gmp-6.2.1.tar
cd gmp-6.2.1
mkdir install
./configure --host=aarch64-buildroot-linux-gnu --prefix=/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install
make
make install

执行完后会在/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install生成gmp的库和头文件

 

删掉gdb源码目录,重新解压、configure、make

rm -r gdb-12.1
tar -xzvf gdb-12.1.tar.gz
cd gdb-12.1
mkdir install
./configure --host=aarch64-buildroot-linux-gnu --prefix=/home/lwf/workplace3/lib/gdb/gdb-12.1/install CFLAGS="-I/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/include -L/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/lib" CXXFLAGS="-I/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/include -L/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/lib"
make
make install

完成后可以看到/home/lwf/workplace3/lib/gdb/gdb-12.1/install/bin下生成了gdbserver 

三、远程调试

将gdbserver拷贝到嵌入式板子上,执行

gdbserver 172.16.25.235:2000 ./App

其中App为要调试的程序的路径

vscode根据 《VsCode + gdb + gdbserver远程调试C++程序》里面的那样配置。然后修改.vscode/launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/app/app/App",
            "stopAtEntry": false,
            "cwd": "/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/app/app",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
            ],
            "preLaunchTask": "C/C++: g++ 生成活动文件",
            "miDebuggerPath": "/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/app/app/Tool/aarch64-buildroot-linux-gnu-gdb",
            "miDebuggerServerAddress":"172.16.53.157:2000",
        }
    ]
}

其中"program"是要被调试的程序在vmware中的路径

"cmd"是要被调试的程序在vmware中的目录

"miDebuggerPath" 是我们刚刚编译出来的aarch64-buildroot-linux-gnu-gdb在vmware中的路径

"miDebuggerServerAddress"对应我们刚刚在板子上执行的gdbserver指令

配置好后,vscode点击F5,即可实现远程调试

 

 

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

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

相关文章

[附源码]计算机毕业设计springboot疫情管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

如何阅读别人的代码

会读好源码,才能写出好代码 而且除了经常写代码,还要保持习惯看看别人是怎么写的,这里我只引出一个话题就是如何阅读别人的代码 。一个工整的代码就好比欣赏一个漂亮的美女一样让人赏心悦目,百看不厌,一个乱糟糟的代码就不忍直视&…

AAAI 2023| 旷视研究院入选论文亮点解读

近日,国际人工智能顶级会议 AAAI 2023 (Association for the Advancement of Artificial Intelligence)公布了录用结果。本届会议共收到来自全球的 8777 篇论文投稿,其中 1721 篇论文被录用,论文录用率为 19.6%。AAAI …

【LeetCode】1796. 字符串中第二大的数字

题目描述 给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。 混合字符串 由小写英文字母和数字组成。 示例 1: 输入:s “dfa12321afd” 输出:2 解释:…

【网络层】动态路由算法、自治系统AS、IP数据报格式

文章目录路由算法路由表 --------协议自己算出最佳路由---找最少的跳数的路路由算法分类静态路由算法---手动配置---军事网络、小网络---缺点 路由更新慢动态路由算法----路由器之间彼此交换信息-------适合大型网络动态路由算法全局性链路状态 路由算法----------OSPF----所有…

远程办公:为远程桌面配置固定的公网TCP端口地址

在上一篇文章《远程办公:通过Cpolar内网穿透,远程桌面控制家里/公司内网电脑》中,我们通过cpolar映射远程桌面3389端口,成功实现了在外远程桌面控制家里/公司的Windows电脑。 但免费使用cpolar所生成的公网地址为随机公网地址&am…

linux软件管家——yum

文章目录1. yum1. 主要概念理解2. yum的使用1.查找软件2. 安装软件1.为什么要加上sudo提高权限?2.正常安装3.直接安装3.卸载软件1. 正常卸载2. 直接卸载3. 动态小火车的展示3. yum源1. 概念2. 查找yum源3. 替换yum源1. 备份yum源2. 更新国内yum源 注意事项 3. 缓存清空1. yum …

Isaac SDK Sim 环境

Isaac 是 NVIDIA 开放的机器人平台。其 Isaac SDK 包括以下内容: Isaac Apps: 各种机器人应用示例,突出 Engine 特性或专注 GEM 功能Isaac Engine: 一个软件框架,可轻松构建模块化的机器人应用Isaac GEMs: 感知、规划到驱动的模块化算法包&a…

使用VC++输出调频波

接此; 使用VC输出调幅波的数值和波形_bcbobo21cn的博客-CSDN博客 前面是基本的调幅;下面来看一下基本的调频; 调频就是使载波的频率随调制信号的频率改变;载波是一个等幅的高频振荡;调制信号就是要传递的信息&#…

ARM mkv210_image.c 文件详解

一、mkv210_image.c 的使用演示 裸机程序中的 Makefile(实际上真正的项目的 Makefile 都是这样的)是把程序的编译和链接过程分开的。(平时我们用 gcc a.c -o exe 这种方式来编译时,实际上把编译和链接过程一步完成了。在内部实际…

WebRTC实战-第二章-使用WebRTC实现音视频通话

目录参考理论iceServerWebRTC共分成三个API,分别对应上面三个作用。getUserMedia调用流程开发步骤leave、peer-leave信令实现offer、answer、candidate信令实现开发获取浏览器的流常规设置设置限制条件创建RTCPeerConnectionRTCDataChannelWebRTC Security外部函数库…

【经验】Word 2021|如何在Word里做出和Markdown中一样漂亮的引用样式

文章目录写在最前方法以及参数1 打开样式窗口2 设置一些基本操作3 打开格式窗口4 修改样式最后一步!保持间隔成品自取写在最前 Word 版本:2021 灵感来自 知乎奶茶叔的回答,以及我自己平时打代码用的代码块样式。但是我将分享我精心调配的参数…

HTML5期末大作业:HTM+CSS+JS仿安徽开放大学官网(web前端网页制作课作业)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

[附源码]计算机毕业设计养生药膳推荐系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Tsinghua:Finding Skill Neurons in Pre-trained Transformer-based Language Models

这篇文章我觉得研究的挺有意思的。 找到神经网络中最有帮助的神经元的一个过程。这个过程的价值是减少PLM参数的前提下,还能提高模型的效果。 在本文中,我们发现在对特定任务进行快速调整后,预训练的 Transformers1 中某些神经元的激活可以高…

Keras计算机视觉(二)

第一部分 认识CNN 一、quickly start 所见即所得,先看一下CNN在MNIST上的运行Demo from keras import layers from keras import modelsmodel models.Sequential() # 定义一个卷积输入层,卷积核是3*3,共32个,输入是(28, 28, 1…

后端开发怎么做得更优秀?记住这15个好习惯

目录 一. 注释尽可能全面,要写有意义的注释 二. 项目拆分合理的目录结构 三. 尽量不在循环里远程调用或者数据库操作,优先考虑批量进行 四. 封装方法形参 五. 封装通用模板 六. 封装复杂的逻辑判断条件 七. 保持优化性能的嗅觉 八. 可变参数的配…

图的初识·遍历

文章目录深度优先搜索[DFS]实现代码广度优先搜索【BFS】思路图解代码实现广度优先遍历【BFS】图的结构深度优先搜索[DFS] 并不唯一,只是一种情况A−>IA->IA−>I 实现代码 使用邻接表表示图。遍历的时间复杂度O(VE)O(VE)O(VE);邻接矩阵的时间…

使用 Python 和 OpenCV 制作反应游戏

在本文中,将向你展示如何使用 OpenCV 在 Python 中制作一个反应游戏,你可以动手来玩。你可能已经熟悉 OpenCV,OpenCV 基本上允许进行各种图像处理。你可以在下面的视频中看到最终结果,并且可以在此处获取文件:https://…

jsp4S店管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 4S店管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发,数据库为Mysql,使用ja…