launch.json必须通过VSCode齿轮图标自动生成,不可手写;否则易遗漏cwd、env、console等关键字段,导致断点失效、模块找不到或路径错误。

launch.json 必须用齿轮图标生成,不能手写
VS Code 的 launch.json 不是配置文件,而是调试会话的“契约说明书”——它把你的意图翻译给 Python/C++/Node.js 等调试扩展。手写极易漏掉 cwd、env、console 这些字段,结果就是断点变空心、ModuleNotFoundError、或直接报 file not found。
正确做法只有一条:打开「运行和调试」侧边栏(Ctrl+Shift+D),点击顶部 ⚙️ 图标,选对应语言模板(如 Python File 或 C++ (GDB/LLDB))。VS Code 会自动生成带注释的完整配置,且自动适配已安装扩展和当前上下文。
- 没看到语言选项?检查:
ms-python.python是否已启用(仅装 Pylance 不行);当前工作区是否已打开.py文件(否则 VS Code 不识别语言) -
version字段固定为"0.2.0",别改,这是调试协议约定值 - 生成后第一件事:确认
type字段是否匹配——"python"对应 Python 扩展,"cppdbg"对应 C/C++ 扩展,填错就完全不生效
program 字段怎么填才不会报 “file not found”
program 是 "request": "launch" 模式下真正执行的入口路径,它不认相对路径的“直觉”,只认 cwd + 路径拼接的结果。
- 推荐统一用变量:
"program": "${workspaceFolder}/src/main.py"(Python)、"program": "${workspaceFolder}/build/myapp"(C++ 编译后二进制) - 单文件调试场景可用
"program": "${file}",但必须确保当前打开的是目标.py或.js文件 - TypeScript 项目里,
program只能指向.js,不是.ts;否则断点打不进去(sourcemap 未加载或编译未带-g) - Windows 下路径一律用正斜杠
/,比如"${workspaceFolder}/dist/index.js",别用反斜杠\(JSON 里会被当转义符处理)
为什么断点不命中?先盯住这三个地方
断点变空心圆、F5 后程序跑完不暂停、悬停变量显示 undefined——这不是 VS Code 坏了,是调试链路某处脱节。
-
sourcemap:前端或 TS 项目必须确保编译输出带sourceMap: true,且launch.json中开启"sourceMaps": true - 解释器路径:Python 调试需在
env或设置中明确指定python.defaultInterpreterPath,否则可能调用系统默认 Python(版本/包环境不一致) - 符号表缺失:C/C++ 必须用
-g编译(tasks.json里加"args": ["-g", "-O0"]),否则 gdb/lldb 读不到变量名和行号
多配置共存时,怎么快速切换 launch 方式
launch.json 的 configurations 是数组,每项是一个独立调试配置。你在调试面板顶部下拉框看到的每个名字,就对应数组里一个对象的 name 字段。
- 想区分开发/测试启动,直接复制一份配置,改
"name": "Launch with test env"和"env"字段即可 - 需要先编译再调试(如 C++ 或 Go),在配置里加
"preLaunchTask": "build",并确保.vscode/tasks.json里有对应label: "build"的任务 - 复合调试(如前端+后端)用
compounds字段,它不启动进程,只串联多个configurations,例如同时启动Launch Edge和Python: Flask
最常被忽略的是:cwd 和 program 的路径联动关系,以及 type 与已安装扩展的强绑定——这两处出问题,其他配置写得再全也没用。


















