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 。

相关推荐
炸膛坦客11 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
AI的探索之旅18 小时前
AI辅助原理图评审:电源去耦、BOOT引脚、VCAP——19项逐一核查,遗漏?不存在的
人工智能·vscode·嵌入式硬件
GeekArch18 小时前
第24讲:Vibe模式代码风格控制——适配Keil/STM32工程规范
人工智能·stm32·单片机·嵌入式硬件·mcu·决策树·ai编程
Freedom_my19 小时前
STM32项目3
stm32·单片机·嵌入式硬件
国科安芯20 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信
小李不困还能学21 小时前
基于 51 单片机的8 路抢答器设计教程
单片机·嵌入式硬件·mongodb·抢答器
萌动的小火苗1 天前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
振浩微433射频芯片1 天前
工业遥控器总在关键时刻“掉链子”?——433MHz芯片方案如何破局
网络·单片机·嵌入式硬件·物联网·工业遥控
blevoice1 天前
抖抖燃脂机单 AC6966B 主控调试踩坑:Type-C 整机供电喇叭无声排障
c语言·开发语言·单片机
三易串口屏1 天前
三易串口屏开发教程:如何使用键盘控件输入参数并发送给单片机
单片机·嵌入式硬件·串口屏·三易串口屏·键盘控件