launch.json 的 program 路径必须为绝对路径,推荐使用 ${workspaceFolder} 拼接;需确保 tasks.json 正确配置并包含 -g 编译选项,且 MIMode 与调试器路径匹配对应工具链。

launch.json 里 program 路径必须是绝对路径,相对路径会失败
VS Code 的 C++ 调试器(通过 cppdbg 扩展)不支持 program 字段里的相对路径。哪怕你写成 "./build/main" 或 "build/main",调试启动时大概率报错:Cannot launch program 'build/main': File not found.
实操建议:
- 用
${workspaceFolder}变量拼出绝对路径,比如"${workspaceFolder}/build/main" - 确保
build目录已存在,且编译产物(如main或main.exe)确实在该路径下 - Windows 下注意扩展名:可执行文件必须带
.exe,否则program指向main会找不到(应写成"${workspaceFolder}/build/main.exe")
调试前必须先生成 tasks.json 并确认它真能编译出可执行文件
launch.json 本身不编译代码,它只调用已存在的二进制。如果你没配 tasks.json,或者配了但 task 实际没成功运行,program 指向的文件就不存在。
常见错误现象:
立即学习“C++免费学习笔记(深入)”;
- 点击“开始调试”后秒退,控制台无输出,或提示
The selected environment does not support debugging - 终端里手动运行
g++ -o build/main src/main.cpp成功,但 VS Code 调试仍失败——说明tasks.json没生效或没绑定到构建任务
关键检查点:
-
tasks.json中label值(如"build")要和launch.json里preLaunchTask的值完全一致 -
tasks.json的type推荐设为"shell"(简单直接),避免用"process"引发路径解析问题 - Windows + MinGW 用户注意:
command写"g++.exe",别漏掉.exe后缀,否则任务静默失败
Windows 下用 MinGW 调试,MIMode 必须设为 "gdb",且 miDebuggerPath 要指向真实 gdb.exe
VS Code 默认可能尝试用 lldb,但 MinGW 工具链不提供 lldb,强行用会卡在 “Launching” 状态或报 Failed to launch MI debugger。
正确配置要点:
-
MIMode字段必须显式写"gdb"(小写,字符串) -
miDebuggerPath不能只写"gdb",得给完整路径,例如"C:\mingw64\bin\gdb.exe" - 路径中的反斜杠要双写(
\),或改用正斜杠(C:/mingw64/bin/gdb.exe) - 如果用的是 MSVC 工具链(不是 MinGW),这里就得换成
"cppvsdbg"和对应visualStudioLauncher配置,混用必崩
调试时看不到变量值或断点灰掉,大概率是编译没加 -g
没有调试信息,GDB 就像没带地图进迷宫。即使 launch.json 全对、程序能跑,你也只能单步执行,看不到局部变量、表达式求值为空、断点显示为空心圆(未绑定)。
解决方法很简单,但容易被忽略:
- 在
tasks.json的编译命令里,args数组中必须包含"-g"(GCC/Clang)或"/Zi"(MSVC) - MinGW 示例:
"args": ["-g", "-o", "${fileDirname}/build/${fileBasenameNoExtension}.exe", "${file}"] - 别只加
-O2或-Wall就以为够了;-g和优化级别可以共存,但-Og更适合调试 - 改完
tasks.json后,务必重新运行一次构建任务(Ctrl+Shift+B),再调试——旧的二进制不会自动重编
最麻烦的情况是:你反复检查配置,一切看似正常,但变量就是不显示。这时候回过头看编译命令有没有 -g,十次有九次是它漏了。











