VS Code + Cortex-Debug STM32 调试配置指南


本文档详细介绍如何在 VS Code 中配置 Cortex-Debug 插件,用于 STM32 微控制器的调试开发。即使你完全不了解这些工具,也能按照本教程完成配置。

⚠️ Agent 使用说明

本文档可被 Claude Code、Cursor 等 AI 助手读取,用于自动执行环境配置。

Agent 工作流程

当用户请求"配置 STM32 调试环境"时,请按以下步骤执行:

步骤 1:检查当前环境

  1. 运行项目根目录的 init-debug-env.bat 脚本检查已安装组件
  2. 询问用户使用的调试器类型(J-Link / ST-Link / OpenOCD)
  3. 确认用户已安装的软件清单

步骤 2:指导安装缺失组件

根据检查结果,参照本文档相应章节指导用户安装:

缺失组件 参照章节
VS Code 第一章 1.1
EIDE 扩展 第一章 1.3
C/C++ 扩展 第一章 1.4
ARM GCC 第一章 1.5
调试器驱动 第一章 1.6

步骤 3:配置项目

  1. 打开 .eide/eide.yml 确认项目配置
  2. 检查/创建 .vscode/launch.json
  3. 根据用户调试器类型选择对应配置模板

步骤 4:验证配置

  1. 执行 EIDE: Build Project 构建项目
  2. 确认 ELF 文件生成
  3. 指导用户连接硬件并启动调试

关键配置项速查

配置项 文件位置 推荐值
芯片型号 .eide/eide.yml STM32F103C8
工具链 .eide/eide.yml AC5 或 GCC
调试器 .vscode/launch.json jlink/stlink/openocd
ELF 路径 .vscode/launch.json build/NewProject/*.elf
工具链路径 .vscode/launch.json armToolchainPath

常见问题快速响应

用户问题 可能原因 解决方案
“objdump failed” 工具链未配置 确认 armToolchainPath 正确
“No such file” ELF 文件不存在 先执行 EIDE: Build
断点空心 优化级别过高 改为 -O0
调试器连接失败 驱动未安装/接线错误 检查硬件连接和驱动

项目信息

  • 芯片: STM32F103C8T6 (Cortex-M3)
  • 项目名称: Balance_car_EIDE
  • 编译输出: build/NewProject/Balance_car_EIDE.elf
  • 默认调试器: J-Link

本文档详细介绍如何在 VS Code 中配置 Cortex-Debug 插件,用于 STM32 微控制器的调试开发。即使你完全不了解这些工具,也能按照本教程完成配置。

目录


前言:什么是这些工具?

在开始配置之前,让我们先了解一下这些工具是什么。

什么是 STM32?

STM32 是 ST 公司生产的 32 位微控制器(MCU),广泛应用于嵌入式开发。你的平衡车使用的是 STM32F103C8T6,属于 Cortex-M3 内核。

什么是 ARM GCC Toolchain?

ARM GCC Toolchain 是一套用于编译 ARM 架构代码的工具集合,包括:

工具 做什么 类比
gcc 编译器,把 C 代码变成机器码 翻译员
ld 链接器,把多个文件合并成一个程序 拼图工人
objdump 反汇编工具,调试时显示机器码对应的代码 逆向翻译员
nm 符号表工具,显示变量和函数名 目录索引

什么是 Cortex-Debug?

Cortex-Debug 是 VS Code 的一个插件,用于调试 ARM Cortex-M 系列芯片。它就像 VS Code 和真实硬件之间的"桥梁"。

什么是 GDB?

GDB (GNU Debugger) 是通用的调试器,Cortex-Debug 内部使用它来控制芯片。

什么是 J-Link / ST-Link / OpenOCD?

这些是调试器固件,运行在电脑上,负责与芯片上的调试接口(SWD)通信。

调试器 说明 特点
J-Link SEGGER 公司出品 速度快,兼容性好
ST-Link ST 公司出品 专为 STM32
OpenOCD 开源调试器 免费,支持多种芯片

调试工作原理

[VS Code]
    ↓ Cortex-Debug 插件
[GDB 调试器] ←→ [J-Link/ST-Link/OpenOCD] ←→ [STM32 芯片]

⚔️ VS Code + EIDE vs Keil:核心对比

本章节聚焦于三个核心维度,帮助你快速选择适合自己的开发环境。

一、开发效率对比

功能 VS Code + EIDE Keil MDK
代码补全 智能补全 + AI 辅助 基础补全
代码重构 F2 重命名、自动更新引用 不支持
多光标编辑 支持 不支持
并行编译 支持,速度快 较慢
构建输出 彩色日志,友好易读 灰色日志,难分辨
断点类型 条件断点、数据断点 仅条件断点
变量查看 悬停显示,直观友好 需要切换窗口

二、AI 结合能力对比

能力 VS Code + EIDE Keil MDK
AI 代码补全 ✅ GitHub Copilot、Codeium 等 ❌ 不支持
AI 对话助手 ✅ 内置 ChatGPT、Claude 等 ❌ 不支持
AI 代码解释 ✅ 一键解释选中代码 ❌ 不支持
AI 调试辅助 ✅ AI 分析错误原因 ❌ 不支持
AI 文档生成 ✅ AI 辅助撰写 README ❌ 不支持

三、扩展能力对比

维度 VS Code + EIDE Keil MDK
插件数量 30,000+ 有限
调试器支持 J-Link/ST-Link/OpenOCD/CMSIS-DAP 仅 J-Link/ST-Link
多芯片开发 一套环境支持多种芯片 仅 ARM Cortex-M
跨平台 Windows/Mac/Linux 仅 Windows
Git 集成 内置 + 图形化 需外部工具

1. 软件要求

软件 说明 下载地址 扩展ID/版本要求
VS Code 代码编辑器 https://code.visualstudio.com/ 最新版本
Cortex-Debug 调试插件 VS Code 扩展市场 marus25.cortex-debug
EIDE 嵌入式开发扩展 VS Code 扩展市场 cl.eide
ARM GCC Toolchain 编译工具链 见第二章 GCC 10.x 或更高
J-Link 软件 调试器驱动 https://www.segger.com/downloads/jlink 如果使用 J-Link

2. 硬件要求

  • 目标芯片: STM32F103C8T6 (Cortex-M3)
  • 调试器: J-Link / ST-Link V2 / OpenOCD 兼容调试器
  • 连接方式: SWD (Serial Wire Debug)

3. 重要注意事项

⚠️ 路径要求

项目路径不能包含中文字符或特殊字符,否则 GDB 无法正确读取文件。

推荐路径

D:/balance_car/
D:/projects/stm32_balancing_car/

不推荐

D:/学习资料/平衡车/      (包含中文)
D:/我的项目/stm32!test/  (包含特殊字符)

第一章:安装软件

步骤 1.1:安装 VS Code

  1. 访问 https://code.visualstudio.com/
  2. 点击"Download for Windows"
  3. 运行安装程序,全程点"下一步"即可
  4. 安装完成后打开 VS Code

验证方法:按下 Win+R,输入 code,回车,应该能打开 VS Code。

步骤 1.2:安装 Cortex-Debug 扩展

  1. 打开 VS Code
  2. Ctrl+Shift+X 打开扩展面板
  3. 在搜索框中输入 cortex-debug
  4. 找到 Cortex-Debug(作者:marus25),点击安装

预期结果:扩展安装成功,VS Code 左侧扩展列表中可以看到该扩展。

步骤 1.3:安装 EIDE 扩展

  1. 在 VS Code 扩展面板中
  2. 搜索 eide
  3. 找到 EIDE(作者:cl.eide),点击安装

预期结果:扩展安装成功。

步骤 1.4:安装 ARM GCC Toolchain(重点)

这是本教程的重点!如果之前的调试报错 objdump failednm failed,就是因为缺少这个工具链。

方式一:xPack 版本(推荐)

为什么推荐这个? 直接下载 zip 文件,解压即可,不需要安装程序。

操作步骤

  1. 打开浏览器,访问:

    https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases
    
  2. 找到最新版本的 Windows x64 版本,文件名类似:

    xpack-arm-none-eabi-gcc-11.3.1-1.1-win32-x64.zip
    
  3. 点击下载(约 200MB,需要一些时间)

  4. 下载完成后,找到这个 zip 文件

  5. 右键全部解压缩 → 解压到:

    C:\Users\你的用户名\AppData\Local\arm-none-eabi-gcc
    

    注意:AppData 是隐藏文件夹,需要在资源管理器中勾选"显示隐藏文件"

  6. 解压后的结构应该是:

    C:\Users\你的用户名\AppData\Local\arm-none-eabi-gcc\
    ├── bin\                    ← 重要!工具都在这里
    │   ├── arm-none-eabi-gcc.exe
    │   ├── arm-none-eabi-objdump.exe   ← 调试需要的
    │   └── arm-none-eabi-nm.exe        ← 调试需要的
    ├── arm-none-eabi\
    └── ...
    
方式二:官方安装包
  1. 访问 https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
  2. 下载 Windows 版本(.exe 安装包)
  3. 运行安装程序,记住安装路径
  4. 安装完成后,把安装路径下的 bin 文件夹添加到 PATH 环境变量

步骤 1.5:安装调试器驱动

根据你使用的调试器选择安装:

如果使用 J-Link:
  1. 访问 https://www.segger.com/downloads/jlink
  2. 下载 J-Link Software for Windows
  3. 运行安装程序
如果使用 ST-Link:
  1. 安装 STM32CubeIDE(免费)
    • 下载地址:https://www.st.com/en/development-tools/stm32cubeide.html
  2. ST-Link 驱动会随 STM32CubeIDE 自动安装
如果使用 OpenOCD:
  1. 访问 https://github.com/xpack-dev-tools/openocd-xpack/releases
  2. 下载 Windows 版本
  3. 解压到合适的位置

第二章:验证安装

打开 PowerShell(Win+X → Windows PowerShell),逐条执行以下命令验证安装。

验证 2.1:检查 ARM GCC 工具链

& "C:\Users\你的用户名\AppData\Local\arm-none-eabi-gcc\bin\arm-none-eabi-gcc.exe" --version

预期输出

arm-none-eabi-gcc.exe (xPack GNU Arm Embedded GCC) 11.3.1 20220712

验证 2.2:检查 objdump

& "C:\Users\你的用户名\AppData\Local\arm-none-eabi-gcc\bin\arm-none-eabi-objdump.exe" --version

预期输出

GNU objdump (xPack GNU Arm Embedded GCC) 2.38.20220708

验证 2.3:检查 nm

& "C:\Users\你的用户名\AppData\Local\arm-none-eabi-gcc\bin\arm-none-eabi-nm.exe" --version

预期输出

GNU nm (xPack GNU Arm Embedded GCC) 2.38.20220708

验证 2.4:检查调试器软件

如果使用 J-Link

& "C:\Program Files (x86)\SEGGER\JLink\JLink.exe" -version

如果使用 ST-Link

where stlink

如果使用 OpenOCD

where openocd

第三章:配置项目

步骤 3.1:打开项目文件夹

  1. 在 VS Code 中
  2. 点击 文件打开文件夹
  3. 选择你的项目根目录(例如 D:\balance_car

步骤 3.2:检查 .vscode 文件夹

项目根目录下应该有 .vscode 文件夹,里面包含三个配置文件:

.vscode/
├── launch.json    ← 调试配置(本教程重点)
├── tasks.json     ← 构建任务
└── settings.json  ← 项目设置

如果找不到这些文件?

  1. Ctrl+Shift+P 打开命令面板
  2. 输入 EIDE: New Project 创建新项目
  3. 或者让 EIDE 自动生成配置

步骤 3.3:配置 launch.json(重点)

launch.json 告诉 Cortex-Debug 如何连接调试器。

方法一:让 EIDE 自动生成(推荐新手)
  1. Ctrl+Shift+P
  2. 输入 EIDE: Open Project
  3. 选择你的项目
  4. EIDE 会自动生成基本的 launch.json
方法二:手动创建/修改
  1. 打开 .vscode/launch.json 文件
  2. 将内容替换为以下配置(根据你的调试器类型选择其中一个):

J-Link 用户配置

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Cortex Debug (J-Link)",
      "type": "cortex-debug",
      "request": "launch",
      "servertype": "jlink",
      "cwd": "${workspaceFolder}",
      "executable": "${workspaceFolder}/build/NewProject/Balance_car_EIDE.elf",
      "device": "STM32F103C8",
      "interface": "swd",
      "armToolchainPath": "C:/Users/你的用户名/AppData/Local/arm-none-eabi-gcc/bin",
      "svdFile": "${workspaceFolder}/.pack/Keil/STM32F1xx_DFP.2.2.0/SVD/STM32F103xx.svd",
      "serverArgs": ["-device", "STM32F103C8", "-if", "SWD", "-speed", "4000"]
    }
  ]
}

ST-Link 用户配置

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Cortex Debug (ST-Link)",
      "type": "cortex-debug",
      "request": "launch",
      "servertype": "stlink",
      "cwd": "${workspaceFolder}",
      "executable": "${workspaceFolder}/build/NewProject/Balance_car_EIDE.elf",
      "device": "STM32F103C8",
      "interface": "swd",
      "armToolchainPath": "C:/Users/你的用户名/AppData/Local/arm-none-eabi-gcc/bin",
      "svdFile": "${workspaceFolder}/.pack/Keil/STM32F1xx_DFP.2.2.0/SVD/STM32F103xx.svd"
    }
  ]
}

OpenOCD 用户配置

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Cortex Debug (OpenOCD)",
      "type": "cortex-debug",
      "request": "launch",
      "servertype": "openocd",
      "cwd": "${workspaceFolder}",
      "executable": "${workspaceFolder}/build/NewProject/Balance_car_EIDE.elf",
      "device": "STM32F103C8",
      "interface": "swd",
      "armToolchainPath": "C:/Users/你的用户名/AppData/Local/arm-none-eabi-gcc/bin",
      "svdFile": "${workspaceFolder}/.pack/Keil/STM32F1xx_DFP.2.2.0/SVD/STM32F103xx.svd",
      "configFiles": ["interface/stlink.cfg", "target/stm32f1x.cfg"]
    }
  ]
}
⚠️ 重要:修改 armToolchainPath

必须将 你的用户名 改成你实际的用户名!

可以用以下命令查看你的用户名:

whoami

输出类似:DESKTOP-XXXX\33025你的电脑名\你的用户名

步骤 3.4:确认 ELF 文件路径

ELF 文件是编译输出的可执行文件,Cortex-Debug 需要读取它来调试。

检查方法

  1. 用 EIDE 构建项目(Ctrl+Shift+PEIDE: Build Project
  2. 构建完成后,在项目目录下找 build/NewProject/ 文件夹
  3. 确认有 .elf 文件

如果找不到 build 文件夹?

  1. 打开 .eide/eide.yml 文件
  2. 找到 outDir 那一行,查看输出目录
  3. 找到 name 那一行,查看项目名称
  4. 组合起来就是 ELF 文件路径:{outDir}/{name}.elf

第四章:验证配置成功

步骤 4.1:构建项目

  1. Ctrl+Shift+P
  2. 输入 EIDE: Build Project
  3. 回车执行

预期结果

  • 输出显示 “Build succeeded”
  • build/NewProject/ 文件夹中生成 .elf 文件

步骤 4.2:运行环境检查脚本(可选)

在项目根目录创建 check-env.bat 文件:

@echo off
echo ========================================
echo 环境检查脚本
echo ========================================

echo.
echo [1] 检查 ARM GCC 工具链...
set TOOLCHAIN_PATH=C:\Users\你的用户名\AppData\Local\arm-none-eabi-gcc\bin\arm-none-eabi-gcc.exe
if exist "%TOOLCHAIN_PATH%" (
    echo [OK] arm-none-eabi-gcc 存在
    "%TOOLCHAIN_PATH%" --version | findstr "gcc"
) else (
    echo [ERROR] arm-none-eabi-gcc 未找到!
    echo 请检查工具链是否安装
)

echo.
echo [2] 检查 objdump...
set OBJDUMP_PATH=C:\Users\你的用户名\AppData\Local\arm-none-eabi-gcc\bin\arm-none-eabi-objdump.exe
if exist "%OBJDUMP_PATH%" (
    echo [OK] arm-none-eabi-objdump 存在
) else (
    echo [ERROR] arm-none-eabi-objdump 未找到!
)

echo.
echo [3] 检查 nm...
set NM_PATH=C:\Users\你的用户名\AppData\Local\arm-none-eabi-gcc\bin\arm-none-eabi-nm.exe
if exist "%NM_PATH%" (
    echo [OK] arm-none-eabi-nm 存在
) else (
    echo [ERROR] arm-none-eabi-nm 未找到!
)

echo.
echo [4] 检查 ELF 文件...
if exist "build\NewProject\Balance_car_EIDE.elf" (
    echo [OK] ELF 文件存在
) else (
    echo [ERROR] ELF 文件不存在!请先构建项目。
)

echo.
echo ========================================
echo 检查完成
echo ========================================
pause

双击运行这个脚本,确认所有检查都显示 [OK]


第五章:开始调试

步骤 5.1:连接硬件

  1. 用 USB 线连接调试器到电脑
  2. 用 SWD 线连接调试器到 STM32 芯片
  3. 确保 STM32 芯片供电正常

步骤 5.2:启动调试

  1. 在 VS Code 中,按 F5 或者点击左侧的运行和调试图标
  2. 点击绿色的播放按钮
  3. 等待连接…

预期结果

  • 终端显示 “Reading symbols from…”(正在读取符号)
  • 代码停在 main 函数入口
  • 调试工具栏出现(继续、暂停、单步等按钮)

步骤 5.3:调试操作

操作 快捷键 说明
继续/暂停 F5 运行或暂停程序
单步跳过 F10 执行一行代码,不进入函数
单步进入 F11 执行一行代码,进入函数内部
单步退出 Shift+F11 从当前函数返回
设置断点 F9 在当前行设置/取消断点
查看变量 悬停 鼠标悬停在变量上查看值
查看调用栈 看左侧 在 CALL STACK 面板查看

附录A:常见问题

Q1: 调试时报错 “objdump failed! ENOENT”

问题原因:找不到 arm-none-eabi-objdump.exe,说明工具链没有正确配置。

解决方法

  1. 确认工具链已安装到 C:\Users\你的用户名\AppData\Local\arm-none-eabi-gcc\bin\
  2. 确认 launch.json 中的 armToolchainPath 路径正确
  3. 注意路径分隔符要用 / 而不是 \

Q2: 调试时报错 “No such file or directory”

问题原因:ELF 文件不存在或路径错误。

解决方法

  1. 先用 EIDE 构建项目,生成 ELF 文件
  2. 检查 launch.json 中的 executable 路径是否正确
  3. 检查项目路径是否包含中文

Q3: 调试器无法连接

检查项

  1. USB 连接:确认调试器 USB 线连接正常

  2. 驱动安装

    • J-Link:设备管理器中应该有 J-Link 设备
    • ST-Link:设备管理器中应该有 ST-Link Debug 设备
  3. SWD 接线

    调试器     STM32
    ───────    ─────
    SWCLK  →  SWCLK
    SWDIO  →  SWDIO
    GND    →  GND
    3.3V   →  3.3V (如果调试器供电)
    
  4. 芯片供电:STM32 必须通电

  5. 选择正确的配置:确认使用的是 J-Link/ST-Link/OpenOCD 中的一种,不要同时使用多个

Q4: 断点变成空心圈(断点未命中)

问题原因:编译优化级别过高,代码被优化掉了。

解决方法

  1. 在 EIDE 项目设置中,将优化级别改为 -O0(无优化)
  2. 重新构建项目
  3. 重新开始调试

Q5: SVD 文件加载失败

问题原因:SVD 文件不存在或路径错误。

解决方法

  1. 确认 .pack 目录下有 SVD 文件
  2. 如果没有,从以下途径获取:
    • Keil STM32F1xx DFU Pack 安装后复制
    • 从 https://github.com/ARM-software/CMSIS_5 下载
  3. 检查 launch.json 中的 svdFile 路径是否正确

Q6: 调试时卡在 “Resetting target”

解决方法

  1. 点击终端中的 “TERMINAL” 标签,查看 GDB Server 输出
  2. 可能是芯片被锁定了,尝试按住复位键再点击调试
  3. 检查 launch.json 中的 serverArgs 配置

Q7: 变量显示 <optimized out>

问题原因:该变量被编译器优化掉了。

解决方法

  1. 将优化级别改为 -O0
  2. 将变量声明为 volatile
  3. 这些变量可能真的被优化掉了,不影响调试

附录B:配置检查清单

在开始调试之前,逐项确认以下内容:

软件安装

  • VS Code 已安装并能正常打开
  • Cortex-Debug 扩展已安装
  • EIDE 扩展已安装
  • ARM GCC 工具链已安装(arm-none-eabi-gcc.exe 存在)
  • arm-none-eabi-objdump.exe 存在
  • arm-none-eabi-nm.exe 存在
  • 调试器驱动已安装(J-Link / ST-Link / OpenOCD)

路径配置

  • 项目路径不包含中文
  • launch.json 中的 armToolchainPath 正确
  • launch.json 中的 executable 指向正确的 ELF 文件
  • launch.json 中的 svdFile 指向正确的 SVD 文件(如果有)

硬件连接

  • 调试器 USB 连接正常
  • SWD 线连接正确
  • STM32 芯片供电正常

构建验证

  • EIDE 构建成功
  • ELF 文件已生成
  • 没有编译错误

附录C:参考资料

资源 地址
VS Code 下载 https://code.visualstudio.com/
Cortex-Debug GitHub https://github.com/Marus/cortex-debug
ARM GCC 官方下载 https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
xPack ARM GCC(推荐) https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases
J-Link 下载 https://www.segger.com/downloads/jlink
OpenOCD 下载 https://openocd.org/
ST-Link(STM32CubeIDE) https://www.st.com/stm32cubeide
CMSIS SVD 文件 https://github.com/ARM-software/CMSIS_5
EIDE 扩展市场 https://marketplace.visualstudio.com/items?itemName=cl.eide

文档版本:2025-03-26
适用芯片:STM32F103C8T6 (Cortex-M3)
测试调试器:J-Link / ST-Link / OpenOCD

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐