当前位置: 首页 > 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…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

虚幻基础:角色旋转

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 移动组件使用控制器所需旋转&#xff1a;组件 使用 控制器旋转将旋转朝向运动&#xff1a;组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转&#xff1a;必须移动才能旋转&#xff0c;不移动不旋转控制器…...