当前位置: 首页 > news >正文

基于VSCODE+GDB+GDBSERVER远程单步调试设备篇(可视化界面)

  • 目录

    说明

    配置方法

    1)VSCODE必备插件

    2)配置launch.json文件,用于GDB调试

    调试步骤

    ​​​​​​目标板运行程序

    1)已启动程序,通过attach方式进入调试

    2)通过gdbserver启动时加载程序(程序路径根据实际情况填写)

    vscode上启动gdb

       1)连接远程开发板,点击爬虫

    2)启动gdb调试

    3)调试快捷键


    说明

        在嵌入式研发过程中,尤其是Linux环境下开发工程师,我相信很多都经历过通过GDB去单步调试程序,但通过命令方式时总会遇到过多的gdb命令、查看堆栈调度、内存等不方便情况(当然如果你是GDB指令集大神可忽略该文章)。由此看来如果有很好的IDE或者较好的插件集成GDB调试方式通过图形化的方式进行单步调试可提高研发效率。我所用过的有:eclipse与vscode等均是比较好用的,本章节重点介绍vscode通过插件方式实现远程调试。

  • 配置方法

  • 1)VSCODE必备插件

        C/C++

        C/C++ Extension Pack

        GDB Debug

        Remote Development

        

2)配置launch.json文件,用于GDB调试

{// 使用 IntelliSense 了解相关属性。// 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch","program": "${workspaceFolder}/output/bin/xcpserver","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}/","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"miDebuggerPath":"/opt/xilinx/sdk/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-gdb","miDebuggerServerAddress":"192.168.1.10:9008"}]
}

        上述配置参数解释,根据个人程序进行对应修改

顶层参数:version:版本号,指定配置文件的格式版本。当前值为 0.2.0,是 Visual Studio Code 的调试配置文件的常见版本。configurations:配置数组,其中每个对象定义一种调试配置。可以设置多个配置,用于不同的调试场景

顶层参数:
        version:版本号,指定配置文件的格式版本。当前值为 0.2.0,是 Visual Studio Code 的调试配置文件的常见版本。
        configurations:配置数组,其中每个对象定义一种调试配置。可以设置多个配置,用于不同的调试场景
配置字段:
        name:配置名称,出现在调试面板中,用于选择调试配置。当前值为 "(gdb) 启动"

        type:调试器的类型,当前值为 "cppdbg",表示使用 C++ 调试器扩展

        request:调试请求的类型,当前配置为launch,可根据实际使用选择配置

                launch:启动程序进行调试

                attach:附加到已经运行的进程进行调试

   program要调试的可执行程序的路径,

                            当前值为 "${workspaceFolder}/output/bin/xcpserver"

        ${workspaceFolder} 是当前工作区根目录

        xcpserver为具体需要远程调试得程序根据实际情况选择

          argv:启动程序时传递的命令行参数,当前值为 [](空数组),表示不传递任何参数

          stopAtEntry:是否在程序入口点处暂停,当前值为 false

        true:在入口点暂停;false:直接运行到第一个断点或结束

          cwd:调试器运行的工作目录,当前值为 "${workspaceFolder}/",即工作区根目录

          environment:配置环境变量的数组,每个环境变量以 namevalue 的形式指定,

                                 当前值为 [],表示使用默认环境变量

         externalConsole:是否使用外部终端来显示程序的标准输出,当前为fasle

                                       true:使用外部终端;false:在 VS Code 的调试控制台中显示

        MIMode:指定使用哪种调试器模式,当前值为 "gdb",表示使用 GNU 调试器(GDB)

        setupCommands:调试器启动时运行的一组命令,通常用于设置调试器的行为

                                        description:命令的描述,便于阅读和管理

                                        text:实际执行的 GDB 命令

                                        ignoreFailures:命令失败时是否忽略错误

                         当前配置包括:启用整齐打印-enable-pretty-printing,用于以更友好的格式显示 STL 和其他复杂类型的内容;

                                                 设置反汇编风格为 Intel-gdb-set disassembly-flavor intel,使 GDB 输出的反汇编代码使用 Intel 语法(而非 AT&T 语法)

        miDebuggerPath:指定用于调试的 GDB 可执行文件路径,根据实际toolchain环境修改

           /opt/xilinx/sdk/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-gdb ,表明调试器是用于 AArch64 架构的交叉调试器

  miDebuggerServerAddress:指定 GDB 远程调试服务器的地址,通常用于远程调试,当前值为 "192.168.1.10:9008";根据目标板得IP与绑定端口进行配置。

此配置文件主要用于:

  1. 在本地通过 VS Code 调试运行于远程设备(AArch64 架构)的程序。
  2. 配置了远程 GDB 调试环境(miDebuggerServerAddressmiDebuggerPath)。
  3. 设置了常见的调试选项(例如整齐打印和 Intel 汇编语法)。

如果需要修改,可以根据实际项目需求调整路径、参数或调试行为

  • 调试步骤

​​​​​​目标板运行程序

1)已启动程序,通过attach方式进入调试

        

gdbserver :9008 --attach 9149

2)通过gdbserver启动时加载程序(程序路径根据实际情况填写)

gdbserver :9008 ./xcpserver

        

vscode上启动gdb

   1)连接远程开发板,点击爬虫

2)启动gdb调试

3)调试快捷键

F5停止运行、开始运行;

F10执行下一步;

F11进入函数执行;

相关文章:

基于VSCODE+GDB+GDBSERVER远程单步调试设备篇(可视化界面)

目录 说明 配置方法 1)VSCODE必备插件 2)配置launch.json文件,用于GDB调试 调试步骤 ​​​​​​目标板运行程序 1)已启动程序,通过attach方式进入调试 2)通过gdbserver启动时加载程序(程序路径根据实际情…...

CamemBERT:一款出色的法语语言模型

摘要 预训练语言模型在自然语言处理中已无处不在。尽管这些模型取得了成功,但大多数可用模型要么是在英语数据上训练的,要么是在多种语言数据拼接的基础上训练的。这使得这些模型在除英语以外的所有语言中的实际应用非常有限。本文探讨了为其他语言训练…...

0基础跟德姆(dom)一起学AI 自然语言处理18-解码器部分实现

1 解码器介绍 解码器部分: 由N个解码器层堆叠而成每个解码器层由三个子层连接结构组成第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接第二个子层连接结构包括一个多头注意力子层和规范化层以及一个残差连接第三个子层连接结构包括一个前馈全连接子层…...

我的创作纪念日——我与CSDN一起走过的365天

目录 一、机缘:旅程的开始 二、收获:沿路的花朵 三、日常:不断前行中 四、成就:一点小确幸 五、憧憬:梦中的重点 一、机缘:旅程的开始 最开始开始写博客是在今年一二月份的时候,也就是上一…...

C++:bfs解决多源最短路与拓扑排序问题习题

1. 多源最短路 其实就是将所有源头都加入队列, 01矩阵 LCR 107. 01 矩阵 - 力扣(LeetCode) 思路 求每个元素到离其最近0的距离如果我们将1当做源头加入队列的话,无法处理多个连续1的距离存储,我们反其道而行之&…...

【面试题】JVM部分[2025/1/13 ~ 2025/1/19]

JVM部分[2025/1/13 ~ 2025/1/19] 1. JVM 由哪些部分组成?2. Java 的类加载过程是怎样的?3. 请你介绍下 JVM 内存模型,分为哪些区域?各区域的作用是什么?4. JVM 垃圾回收调优的主要目标是什么?5. 如何对 Jav…...

文献综述相关ChatGPT提示词分享

文献综述 ChatGPT 可以帮助提高文献综述的有效性和全面性。ChatGPT可以高效搜索和审查与宝子们课题研究相关的文献资料来源。一些给力的插件工具还可以帮助您总结复杂的研究论文并提取信息以更快更好地消化信息。合理的运用ChatGPT和GPTs可以提高文献综述的清晰度和质量&#…...

Excel 技巧14 - 如何批量删除表格中的空行(★)

本文讲如何批量删除表格中的空行。 1,如何批量删除表格中的空行 要点就是按下F5,然后选择空值条件以定位所有空行,然后删除即可。 按下F5 点 定位条件 选 空值,点确认 这样就选中了空行 然后点右键,选 删除 选中 下方…...

图片生成Prompt编写技巧

1. 图片情绪(场景氛围) 一张图片一般都会有一个情绪基调,因为作画本质上也是在传达一些情绪,一般都会借助图片的氛围去转达。例如:比如家庭聚会一般是欢乐、喜乐融融。断壁残垣一般是悲凉。还有萧瑟、孤寂等。 2.补充细…...

【STM32-学习笔记-4-】PWM、输入捕获(PWMI)

文章目录 1、PWMPWM配置 2、输入捕获配置3、编码器 1、PWM PWM配置 配置时基单元配置输出比较单元配置输出PWM波的端口 #include "stm32f10x.h" // Device headervoid PWM_Init(void) { //**配置输出PWM波的端口**********************************…...

TOSUN同星TsMaster使用入门——3、使用系统变量及c小程序结合panel面板发送报文

本篇内容将介绍TsMaster中常用的Panel面板控件以及使用Panel控件通过系统变量以及c小程序来修改信号的值,控制报文的发送等。 目录 一、常用的Panel控件介绍 1.1系统——启动停止按钮 1.2 显示控件——文本框 1.3 显示控件——分组框 1.4 读写控件——按钮 1.…...

【Web】2025-SUCTF个人wp

目录 SU_blog SU_photogallery SU_POP SU_blog 先是注册功能覆盖admin账号 以admin身份登录,拿到读文件的权限 ./article?filearticles/..././..././..././..././..././..././etc/passwd ./article?filearticles/..././..././..././..././..././..././proc/1…...

React进阶之react.js、jsx模板语法及babel编译

React React介绍React官网初识React学习MVCMVVM JSX外部的元素props和内部的状态statepropsstate 生命周期constructorgetDerivedStateFromPropsrendercomponentDidMount()shouldComponentUpdategetSnapshotBeforeUpdate(prevProps, prevState) 创建项目CRA:create-…...

在Linux上如何让ollama在GPU上运行模型

之前一直在 Mac 上使用 ollama 所以没注意,最近在 Ubuntu 上运行发现一直在 CPU 上跑。我一开始以为是超显存了,因为 Mac 上如果超内存的话,那么就只用 CPU,但是我发现 Llama3.2 3B 只占用 3GB,这远没有超。看了一下命…...

R 语言科研绘图第 20 期 --- 箱线图-配对

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

suctf2025

Suctf2025 --2标识为看的wp,没环境复现了 所有参考资料将在文本末尾标明 WEB SU_photogallery 思路👇 构造一个压缩包,解压出我们想解压的部分,然后其他部分是损坏的,这样是不是就可以让整个解压过程是出错的从而…...

Quinlan C4.5剪枝U(0,6)U(1,16)等置信上限如何计算?

之前看到Quinlan中关于C4.5决策树算法剪枝环节中,关于错误率e置信区间估计,为啥 当E=0时,U(0,1)=0.75,U(0,6)=0.206,U(0,9)=0.143? 而当E不为0时,比如U(1,16)=0.157,如图: 关于C4.5决策树,Quinlan写了一本书,如下: J. Ross Quinlan (Auth.) - C4.5. Programs f…...

计算机组成原理--笔记二

目录 一.计算机系统的工作原理 二.计算机的性能指标 1.存储器的性能指标 2.CPU的性能指标 3.系统整体的性能指标&#xff08;静态&#xff09; 4.系统整体的性能指标&#xff08;动态&#xff09; 三.进制计算 1.任意进制 > 十进制 2.二进制 <> 八、十六进制…...

麒麟系统中删除权限不够的文件方法

在麒麟系统中删除权限不够的文件&#xff0c;可以尝试以下几种方法&#xff1a; 通过修改文件权限删除 打开终端&#xff1a;点击左下角的“终端”图标&#xff0c;或者通过搜索功能找到并打开终端 。定位文件&#xff1a;使用cd命令切换到文件所在的目录 。修改文件权限&…...

自定义提示确认弹窗-vue

最初可运行代码 弹窗组件代码&#xff1a; &#xff08;后来发现以下代码可运行&#xff0c;但打包 typescript 类型检查出错&#xff0c;可打包的代码在文末&#xff09; <template><div v-if"isVisible" class"dialog"><div class&quo…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...