VSCode + GDB + J-Link 单片机程序调试实践

devtools/2024/10/21 9:33:54/

VSCode + GDB + J-Link 单片机程序调试实践

本文介绍如何创建VSCode的调试配置,如何控制调试过程,如何查看修改各种变量。

安装调试插件

  • 在 VSCode 扩展窗口搜索安装 Cortex-Debug插件
    在这里插入图片描述

在这里插入图片描述

创建调试配置

  • 在 Run and Debug 窗口点击 create a launch.json file ,弹出窗口选择 Cortex Debug 。将创建一个默认的配置文件。
    在这里插入图片描述

修改默认配置

  • 修改 executable 字段,填入待调试的程序文件名,注意:必须是 elf 格式,不是 hex 或 bin 。
  • 修改 device 字段,填入 MCU 型号。
  • 可选修改 name 字段,填入易理解的名称,这是区分不同调试配置的名称。
  • 可选添加 svdPath 字段,如果需要查看外设寄存器。
    在这里插入图片描述

启动调试

  • 完成配置后, Run and Debug 窗口将显示调试配置名称,点击绿色三角形 StartDebugging 按钮启动调试,如下图所示。
    在这里插入图片描述

  • 启动调试后,将在窗口上方显示调试工具栏,如下图所示。
    在这里插入图片描述

调试工具栏

  • 第一个按钮为 Reset device 。复位 MCU ,重新从 main 开始执行。
    在这里插入图片描述

  • 第二个按钮为 Continue ,连续执行,即 Run 操作。连续执行期间,该按钮将变成 Pause 按钮,点击Pause 按钮将暂停 CPU 的执行,即Halt 操作。
    在这里插入图片描述
    在这里插入图片描述

  • Step Over 按钮,单步执行,碰到函数,将函数作为一个步骤执行。

  • 若当前焦点在源代码窗口,则执行语句单步。

  • 若当前焦点在反汇编窗口,则执行指令单步。
    在这里插入图片描述

  • Step Into 按钮,单步执行,碰到函数则进入函数。

  • 若当前焦点在源代码窗口,则执行语句单步。

  • 若当前焦点在反汇编窗口,则执行指令单步。
    在这里插入图片描述

  • Step Out ,执行完当前函数剩余语句并返回调用处后暂停。即 Return操作。
    在这里插入图片描述

  • Restart ,重新开始,复位MCU ,重新从 main 开始执行。与 Reset device 按钮等效。

  • 但是,点击过 Restart 按钮后,结束调试时,调试工具栏不会消失,因此推荐使用 Reset device按钮。
    在这里插入图片描述

  • Stop ,结束调试
    在这里插入图片描述

添加断点

  • 在源代码窗口行号左侧点击添加断点。
    在这里插入图片描述

  • 在 BREAKPOINTS 窗口点击加号图标添加函数断点。
    在这里插入图片描述

查看调用栈

  • CALL STACK 窗口查看当前调用栈,下方函数调用上方函数。
    在这里插入图片描述

查看局部变量和 CPU 寄存器

  • 在 VARIABLES 窗口的 Local 分类下查看函数局部变量。
  • 在 VARIABLES 窗口的 Registers 分类下查看 CPU 寄存器。
  • VARIABLES 窗口还可以查看全部全局变量和当前源文件的静态变量,这里列出的变量太多了,不利查看,要查看全局变量可以将全局变量添加到 WATCH窗口。
    在这里插入图片描述

查看全局变量

  • 选中全局变量,弹出右键菜单,选择 Add to Watch ,将全局变量添加到 WATCH 窗口。
    在这里插入图片描述

  • 也可以在 WATCH 窗口点击加号按钮添加全局变量到 WATCH 窗口。
    在这里插入图片描述

查看外设寄存器

  • XPERIPHERALS 窗口查看外设寄存器。
  • 若未在调试配置中指定 svdPath ,那么外设寄存器窗口将不可见。
    在这里插入图片描述

查看反汇编

  • 在 CPU 被 halt 的状态下,在源代码窗口点击右键选择Open Disassembly View 打开反汇编窗口。
  • 可以拖动反汇编窗口,使其与源代码窗口并排,以便对照。
  • 单步执行时,若焦点在源代码窗口,那么执行语句单步,若焦点在反汇编窗口,那么执行指令单步。
    在这里插入图片描述

在线监视变量

  • 若在调试配置中设置了liveWatch 字段,将支持 Live Watch ,即在线监视变量。
  • 添加到 CORTEX LIVEWATCH 窗口中的变量在CPU 执行期间将定时读取其数值,并在窗口内显示。
  • 其它方式查看变量值时需要将CPU 停下,而 Live Watch 可以在不暂停 CPU 执行的情况下定时更新变量值。
    在这里插入图片描述

查看操作系统任务列表

  • Cortex-Debug 插件包含 XRTOS 窗口,可以自动检测程序是否使用了操作系统,并可以查看所支持的操作系统任务列表,如下图所示, XRTOS 检测到当前程序使用了 uC/OS-II ,并列出了所有任务,包括任务优先级、任务名称、堆栈使用情况。
    在这里插入图片描述

添加 Watchpoint

  • VSCode 图形界面未找到添加Watchpoint 的入口。

  • 可以通过调试器命令行窗口输入调试命令的方式添加Watchpoint 。

  • 在 DEBUG CONSOLE 窗口输入 watch OSRunning 添加Watchpoint 监视 OSRunning被修改的位置。
    在这里插入图片描述

  • DEBUG CONSOLE 输入 info break 可以查看添加的Watchpoint 。
    在这里插入图片描述


http://www.ppmy.cn/devtools/56975.html

相关文章

【Qt】之【Bug】大量出现“未定义的标识符”问题

背景 构建时出现大量错误 原因 中文注释问题 解决 方法1. 报错代码附近的中文注释全部删掉。。。 方法2. 报错的文件添加 // Chinese word comment solution #pragma execution_character_set("utf-8")

c++笔记

位运算符优先级 乘除求余>加减>移位运算符(>>, <<)>比较运算>位运算>逻辑运算符 位运算优先级没有比较运算符优先级高。 指针与引用写法 int& a, b; 定义了一个int引用a和int b。至于int& a还是int &a都可以&#xff0c;是不同的风格…

音视频入门基础:H.264专题(6)——FFmpeg源码:从H.264码流中提取NALU Header、EBSP、RBSP和SODB

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

LeetCode.68文本左右对齐

问题描述 给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往每行中放置单词…

Python中的爬虫实战:猫眼电影爬虫

随着互联网技术的快速发展&#xff0c;网络上的信息量越来越庞大。猫眼电影作为国内领先的电影数据平台&#xff0c;为用户提供了全面的电影信息服务。本文将介绍如何利用python编写简单的猫眼电影爬虫&#xff0c;获取电影相关数据。 爬虫概述 爬虫&#xff0c;即网络爬虫&a…

简单科普-GPT到底是什么?

1.ChatGPT ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是OpenAI研发的一款聊天机器人程序 &#xff0c;于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够基于在预训练阶段所见…

达梦数据库系列—15. 表的备份和还原

目录 1、表备份 2、表还原 1、表备份 表备份和表还原恢复&#xff0c;都必须在联机状态下进行。 与备份数据库与表空间不同&#xff0c;不需要备份归档日志&#xff0c;不存在增量备份之说。 CREATE TABLE TAB_FOR_RES_02(C1 INT);CREATE INDEX I_TAB_FOR_RES_02 ON TAB_F…

从零搭建教育管理系统:Java + Vue.js 教学-01

项目大纲 第一部分:项目概述及技术选型 项目介绍 教育管理系统的背景需求,解决传统管理痛点目标用户:学生、教师、管理员核心功能模块:账号管理、课程管理、成绩管理、作业管理等技术选型 后端: Spring Boot (简化开发流程)MyBatis-Plus (简化数据库操作)MySQL (数据存储…