VS Code 没有全局 launch.json;调试配置仅支持工作区级(.vscode/launch.json)和多根工作区级(.code-workspace 中的 launch 段),用户级 settings.json 中的 "launch" 字段仅能覆盖少数通用选项(如 console、env),无法定义 configurations,也不参与调试菜单渲染。

全局 launch.json 不支持直接配置
VS Code 没有“全局 launch.json”这个概念。launch.json 只能存在于工作区(文件夹)或多根工作区(.code-workspace)中,**无法在用户级 settings.json 里定义完整的调试配置对象**。你看到的“用户级 launch 配置”,其实是把 launch 字段写进 settings.json,但它的作用非常有限:它只允许你覆盖某些通用字段(比如 console、env 默认值),不能新增或管理独立的 configurations。
用户级 settings.json 中能改什么
如果你希望所有项目默认使用某种调试行为,可以在 settings.json(通过 Ctrl+, → Open Settings (JSON))里设置以下字段:
-
"debug.console": "integratedTerminal"—— 所有调试会话默认用集成终端输出(而非 internalConsole) -
"debug.internalConsoleOptions": "neverOpen"—— 禁用内部调试控制台 -
"debug.showInStatusBar": true—— 始终在状态栏显示调试状态 -
"debug.env": { "NODE_ENV": "development" }—— 为所有调试器注入默认环境变量(注意:不是每个调试器都尊重该字段,node和python支持,cpp不支持)
这些设置会被工作区级 launch.json 中同名字段**覆盖**,所以它只是兜底逻辑,不是替代方案。
真正需要“跨项目复用调试参数”怎么办
多数人想实现的其实是“一套调试配置,多个项目都能用”,这时正确做法是:
- 用
${workspaceFolder}+ 相对路径写program,让配置天然适配不同项目结构 - 把常用
args或env抽成${input:xxx},配合inputs实现交互式复用(比如统一 prompt 端口、环境名) - 在团队中,把标准化的
.vscode/launch.json提交到 Git,靠工作区级配置保证一致性 - 避免依赖用户级设置来传递关键参数(如
program、port、pathMappings),它们必须按项目具体路径/端口/映射关系写死或动态生成
硬塞到用户级 settings.json 的 launch 字段里,不仅不生效,还会和工作区配置冲突,导致调试启动失败或参数被静默忽略。
容易被忽略的关键点
很多人以为在 settings.json 里写一段类似 "launch": { "configurations": [...] } 就能全局生效,结果发现运行面板里根本看不到那些配置项——因为 VS Code **只读取工作区根目录下的 .vscode/launch.json 来填充调试下拉菜单**。用户级 launch 设置不参与菜单渲染,也不触发任何 request: launch 行为。它只影响极少数底层行为,且文档未完整公开,属于隐藏能力,不建议依赖。


















