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 。

相关推荐
人才程序员3 分钟前
【Rust入门】生成随机数
开发语言·数据库·后端·单片机·rust
汀小烟3 小时前
使用静态成员函数统计学生平均成绩
c语言·开发语言·数据结构·c++·vscode
薛瑄3 小时前
gdb调试命令大全
gdb
调光IC小雅3 小时前
【大功率汽车大灯升压方案】LED恒流驱动芯片FP7208升压车灯调光应用,PWM内部转模拟,调光深度1%,无频闪顾虑,低亮无抖动
单片机·汽车·智能家居
小小怪下士的编程小屋4 小时前
stm32中断
c语言·stm32·单片机·嵌入式硬件
Eiceblue5 小时前
Python 插入、替换、提取、或删除Excel中的图片
开发语言·vscode·python·pycharm·excel
m0_747124535 小时前
将QT移植到IMX6ULL开发板
linux·单片机·qt·imx6ull
ooolmf6 小时前
蓝牙模块的使用01,OOOLMF蓝牙模块HC05调试使用01AT设置从机,手机用软件对接
stm32·单片机·51单片机
岁月磨吾少年志7 小时前
【STM32】温湿度采集与OLED显示
stm32·单片机·嵌入式硬件
XD7429716367 小时前
【TB作品】atmega16 超声波倒车雷达,ATMEGA16单片机,Proteus仿真
单片机·proteus·超声波雷达