VSCode + GDB + J-Link 单片机程序调试实践
VSCode + GDB + J-Link 单片机程序调试实践
本文将详细介绍如何使用VSCode、GDB和J-Link进行单片机程序调试。通过本文,你将学会如何创建调试配置、控制调试过程,以及如何查看和修改各种变量。
安装调试插件
在开始调试之前,首先需要在VSCode中安装Cortex-Debug插件。打开VSCode的扩展窗口,搜索并安装Cortex-Debug插件。
创建调试配置
安装完插件后,接下来需要创建调试配置文件。在Run and Debug窗口点击"create a launch.json file"按钮,然后在弹出窗口中选择Cortex Debug。这将创建一个默认的配置文件。
修改默认配置
在创建的launch.json文件中,需要对以下字段进行修改:
executable
:填入待调试的程序文件名,注意必须是elf格式,而不是hex或bin格式。device
:填入MCU型号。name
:可选,填入易理解的名称,用于区分不同的调试配置。svdPath
:可选,如果需要查看外设寄存器,可以添加此字段。
启动调试
完成配置后,在Run and Debug窗口将显示调试配置名称。点击绿色三角形的"Start Debugging"按钮启动调试。
调试工具栏
启动调试后,窗口上方将显示调试工具栏,包含以下功能:
- Reset device:复位MCU,重新从main开始执行。
- Continue:连续执行,点击后会变成Pause按钮,用于暂停CPU执行。
- Step Over:单步执行,碰到函数时将函数作为一个步骤执行。
- Step Into:单步执行,碰到函数时进入函数内部。
- Step Out:执行完当前函数剩余语句并返回调用处后暂停。
- Restart:重新开始调试,与Reset device按钮功能相同,但使用Reset device更推荐。
- Stop:结束调试。
添加断点
- 在源代码窗口行号左侧点击可以添加断点。
- 在BREAKPOINTS窗口点击加号图标可以添加函数断点。
查看调用栈
在CALL STACK窗口可以查看当前调用栈,下方函数调用上方函数。
查看局部变量和CPU寄存器
- 在VARIABLES窗口的Local分类下可以查看函数局部变量。
- 在VARIABLES窗口的Registers分类下可以查看CPU寄存器。
- VARIABLES窗口还可以查看全部全局变量和当前源文件的静态变量,但变量太多时不利于查看,建议将全局变量添加到WATCH窗口。
查看全局变量
- 选中全局变量,右键选择"Add to Watch",将全局变量添加到WATCH窗口。
- 也可以在WATCH窗口点击加号按钮添加全局变量。
查看外设寄存器
在XPERIPHERALS窗口可以查看外设寄存器。如果未在调试配置中指定svdPath,那么外设寄存器窗口将不可见。
查看反汇编
在CPU被halt的状态下,在源代码窗口点击右键选择"Open Disassembly View"可以打开反汇编窗口。可以拖动反汇编窗口,使其与源代码窗口并排,以便对照。单步执行时,若焦点在源代码窗口,那么执行语句单步,若焦点在反汇编窗口,那么执行指令单步。
在线监视变量
如果在调试配置中设置了liveWatch字段,将支持Live Watch,即在线监视变量。添加到CORTEX LIVEWATCH窗口中的变量在CPU执行期间将定时读取其数值,并在窗口内显示。这种方式可以在不暂停CPU执行的情况下定时更新变量值。
查看操作系统任务列表
Cortex-Debug插件包含XRTOS窗口,可以自动检测程序是否使用了操作系统,并可以查看所支持的操作系统任务列表。例如,XRTOS可以检测到当前程序使用了uC/OS-II,并列出所有任务,包括任务优先级、任务名称、堆栈使用情况等信息。
添加Watchpoint
VSCode图形界面未找到添加Watchpoint的入口。可以通过调试器命令行窗口输入调试命令的方式添加Watchpoint。在DEBUG CONSOLE窗口输入watch OSRunning
可以添加Watchpoint监视OSRunning被修改的位置。输入info break
可以查看添加的Watchpoint。
本文原文来自CSDN