当前位置: 首页 > 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进入函数执行;

http://www.lryc.cn/news/523772.html

相关文章:

  • CamemBERT:一款出色的法语语言模型
  • 0基础跟德姆(dom)一起学AI 自然语言处理18-解码器部分实现
  • 我的创作纪念日——我与CSDN一起走过的365天
  • C++:bfs解决多源最短路与拓扑排序问题习题
  • 【面试题】JVM部分[2025/1/13 ~ 2025/1/19]
  • 文献综述相关ChatGPT提示词分享
  • Excel 技巧14 - 如何批量删除表格中的空行(★)
  • 图片生成Prompt编写技巧
  • 【STM32-学习笔记-4-】PWM、输入捕获(PWMI)
  • TOSUN同星TsMaster使用入门——3、使用系统变量及c小程序结合panel面板发送报文
  • 【Web】2025-SUCTF个人wp
  • React进阶之react.js、jsx模板语法及babel编译
  • 在Linux上如何让ollama在GPU上运行模型
  • R 语言科研绘图第 20 期 --- 箱线图-配对
  • suctf2025
  • Quinlan C4.5剪枝U(0,6)U(1,16)等置信上限如何计算?
  • 计算机组成原理--笔记二
  • 麒麟系统中删除权限不够的文件方法
  • 自定义提示确认弹窗-vue
  • 运行fastGPT 第五步 配置FastGPT和上传知识库 打造AI客服
  • CSS 合法颜色值
  • Redis - General - 未授权访问漏洞(用户配置问题)
  • 解决 WSL 2 中 Ubuntu 22.04 安装 Docker 后无法启动的问题
  • Conda的一些常用命令
  • AI 大爆发时代,音视频未来路在何方?
  • Invicti-Professional-V25.1
  • 【版图设计】2025年 最新 Cadence Virtuoso IC617 虚拟机环境配置全过程 集成电路版图设计环境配置
  • Python基本概念与实践
  • # [Unity] 【游戏开发】获取物体和组件的脚本方法
  • 10 为什么系统需要引入分布式、微服务架构