Linux下使用VSCode和Cortex-Debug调试MCU
目录
随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有一点用处的技巧,用的不多的技巧可能一个星期就忘了。
想了很久想通过一些手段把这些事情记录下来。也尝试过在书上记笔记,这也只是一时的,书不在手边的时候那些笔记就和没记一样,不是很方便。
很多时候我们遇到了问题,一般情况下都是选择在搜索引擎检索相关内容,这样来的也更快一点,除非真的找不到才会去选择翻书。后来就想到了写博客,博客作为自己的一个笔记平台倒是挺合适的。随时可以查阅,不用随身携带。
同时由于写博客是对外的,既然是对外的就不能随便写,任何人都可以看到。经验对于我来说那就只是经验而已,公布出来说不一定我的一些经验可以帮助到其他的人。遇到和我相同问题时可以少走一些弯路。
既然决定了要写博客,那就只能认真去写。不管写的好不好,尽力就行。千里之行始于足下,一步一个脚印,慢慢来 ,写的多了慢慢也会变好的。权当是记录自己的成长的一个过程,等到以后再往回看时,就会发现自己以前原来这么菜😂。
本系列博客所述资料均来自互联网,并不是本人原创(只有博客是自己写的)。出于热心,本人将自己的所学笔记整理并推出相对应的使用教程,方面其他人学习。为国内的物联网事业发展尽自己的一份绵薄之力,没有为自己谋取私利的想法。若出现侵权现象,请告知本人,本人会立即停止更新,并删除相应的文章和代码。
前言
在嵌入式开发中,调试是必不可少的环节。对于基于 STM32 的项目,使用 Visual Studio Code(VSCode)搭配 Cortex-Debug 插件和 OpenOCD 是一种高效且强大的调试方式。本文将详细介绍如何在 Linux 系统上配置和使用这一调试环境。
环境准备
在开始之前,请确保你已经安装了以下软件和工具:
- Linux 系统:推荐使用 Ubuntu 或 Debian 系列的 Linux 发行版。
- Visual Studio Code:从 VSCode 官方网站下载并安装。
- Cortex-Debug 插件:在 VSCode 的扩展商店中搜索并安装 Cortex-Debug 插件。
- OpenOCD:用于与硬件调试器通信的工具。
- DAPLink:一种用于调试和编程的固件。
- GDB:GNU 调试器,用于调试程序。
安装 OpenOCD
OpenOCD 是一个开源的硬件调试和编程工具,支持多种硬件接口和芯片。在 Linux 上安装 OpenOCD 非常简单。打开终端并运行以下命令:
sudo apt-get update
sudo apt-get install openocd
安装完成后,可以通过运行以下命令来检查 OpenOCD 是否安装成功:
openocd --version
如果安装成功,你将看到 OpenOCD 的版本信息。
becase@7080:~$ openocd --version
Open On-Chip Debugger 0.12.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
安装GDB
GDB 是 GNU 调试器,用于调试程序。对于 ARM Cortex-M 系列的调试,通常需要安装 gdb-multiarch。在 Linux 上,可以通过以下命令安装:
sudo apt-get update
sudo apt-get install binutils-multiarch
安装完成后,可以通过运行以下命令来检查 GDB 是否安装成功:
gdb-multiarch --version
如果安装成功,你将看到 GDB 的版本信息。
becase@7080:~$ gdb-multiarch --version
GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
配置 VSCode 的 Cortex-Debug 插件
配置 settings.json
在 VSCode 中,settings.json 文件用于存储全局或工作区的配置信息。对于 Cortex-Debug 插件,我们需要指定 GDB 和 objdump 的路径。在 VSCode 的工作区根目录下创建 .vscode 文件夹(如果尚未创建),并在其中创建或编辑 settings.json 文件,内容如下:
{
"cortex-debug.gdbPath.linux": "/usr/bin/gdb-multiarch",
"cortex-debug.objdumpPath.linux": "/usr/bin/objdump"
}
这里指定的路径是 gdb-multiarch 和 objdump 的默认安装路径。如果你的系统中这些工具安装在其他位置,请相应修改路径。
配置 launch.json
launch.json 文件用于定义调试配置。在 .vscode 文件夹中创建或编辑 launch.json 文件,内容如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug with OpenOCD (DAPLink)",
"cwd": "${workspaceFolder}",
"executable": "${workspaceFolder}/build/project_build.elf",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"runToEntryPoint": "main",
"configFiles": [
"interface/cmsis-dap.cfg",
"target/stm32f4x.cfg"
],
"preLaunchCommands": [
"monitor halt"
],
"svdFile": "${workspaceFolder}/prebuilts/STMicroelectronics_CMSIS_SVD/STM32F407.svd"
}
]
}
配置说明:
executable:指定要调试的可执行文件路径。这里假设你的编译输出文件名为project_build.elf,并位于工作区的build文件夹中。configFiles:指定 OpenOCD 的配置文件路径。cmsis-dap.cfg是用于 DAPLink 接口的配置文件,stm32f4x.cfg是针对 STM32F4 系列芯片的配置文件。svdFile:指定 SVD 文件路径。SVD 文件用于描述芯片的外设寄存器。这里假设你的 SVD 文件位于prebuilts/STMicroelectronics_CMSIS_SVD/STM32F407.svd。
启动调试
完成上述配置后,就可以开始调试了。在 VSCode 中,按下 F5 键或从菜单中选择“调试”->“启动调试”,选择“Debug with OpenOCD (DAPLink)”配置。VSCode 将启动 OpenOCD 服务器,并通过 GDB 连接到你的 STM32 设备。
[2025-05-19T07:38:06.999Z] SERVER CONSOLE DEBUG: onBackendConnect: gdb-server session connected. You can switch to "DEBUG CONSOLE" to see GDB interactions.
openocd -c "gdb_port 50000" -c "tcl_port 50001" -c "telnet_port 50002" -s /media/becase/common/code/linux/Agricultural_Intelligence/mcu_project_cmake -f /home/becase/.vscode/extensions/marus25.cortex-debug-1.12.1/support/openocd-helpers.tcl -f interface/cmsis-dap.cfg -f target/stm32f4x.cfg
Open On-Chip Debugger 0.12.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
CDLiveWatchSetup
Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'.
Info : Listening on port 50001 for tcl connections
Info : Listening on port 50002 for telnet connections
Info : Using CMSIS-DAPv2 interface with VID:PID=0x0d28:0x0204, serial=000100011a5a5bb600000000000a3100a5a5a5a597969908
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: Atomic commands supported
Info : CMSIS-DAP: Test domain timer supported
Info : CMSIS-DAP: FW Version = 2.1.0
Info : CMSIS-DAP: Serial# = 000100011a5a5bb600000000000a3100a5a5a5a597969908
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 2000 kHz
Info : SWD DPIDR 0x2ba01477
Info : [stm32f4x.cpu] Cortex-M4 r0p1 processor detected
Info : [stm32f4x.cpu] target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f4x.cpu on 50000
Info : Listening on port 50000 for gdb connections
Info : accepting 'gdb' connection on tcp/50000
Info : device id = 0x101f6413
Info : flash size = 1024 KiB
Info : flash size = 512 bytes
undefined debug reason 8 - target needs reset
Info : SWD DPIDR 0x2ba01477
[stm32f4x.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08001840 msp: 0x20020000
Info : SWD DPIDR 0x2ba01477
[stm32f4x.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08001840 msp: 0x20020000
Info : SWD DPIDR 0x2ba01477
[stm32f4x.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08001840 msp: 0x20020000
Info : SWD DPIDR 0x2ba01477
[stm32f4x.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08001840 msp: 0x20020000
调试功能
- 断点设置:在代码中点击行号旁边的空白处,可以设置断点。
- 单步调试:使用 VSCode 调试工具栏中的“单步进入”、“单步跳过”和“单步退出”按钮,可以逐行或逐函数执行代码。
- 变量查看:在调试过程中,可以查看和修改变量的值。
- 寄存器查看:通过 SVD 文件的支持,可以查看和修改 STM32 的寄存器值。
常见问题及解决方法
OpenOCD 无法连接到硬件
如果 OpenOCD 无法连接到硬件,可能是硬件未正确连接或驱动未正确安装。请检查硬件连接,并确保 DAPLink 固件已正确烧录到调试器上。
调试时无法加载符号
如果调试时提示无法加载符号,可能是 executable 路径不正确,或者编译时未生成调试信息。请确保编译时启用了调试选项(如 -g),并检查 executable 路径是否正确。
SVD 文件未正确加载
如果 SVD 文件未正确加载,可能是路径错误或文件格式不正确。请检查 SVD 文件路径是否正确,并确保文件内容符合 SVD 格式规范。
那么本篇博客就到此结束了,这里只是记录了一些我个人的学习笔记,其中存在大量我自己的理解。文中所述不一定是完全正确的,可能有的地方我自己也理解错了。如果有些错的地方,欢迎大家批评指正。如有问题直接在对应的博客评论区指出即可,不需要私聊我。我们交流的内容留下来也有助于其他人查看,说不一定也有其他人遇到了同样的问题呢😂。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)