launch.json必须放在项目根目录的.vscode目录下,因为VSCode仅在此路径识别调试配置;放错位置会导致调试菜单空白、F5无反应、“无法找到有效配置”等错误。

VSCode 的调试配置不是临时设置,必须写进 launch.json 文件才能保存和复用——不存进去,关掉窗口就丢,换台机器也没用。
为什么 launch.json 必须放在 .vscode 目录下
launch.json 只有放在项目根目录的 .vscode 文件夹里,VSCode 才会把它识别为当前工作区的调试配置。放错位置(比如放在 src/ 或用户 home 目录)会导致:调试下拉菜单空、F5 按下无反应、“无法找到有效的启动配置”错误。
- 路径必须是:
.vscode/launch.json(注意是点开头的隐藏文件夹) - 文件名大小写敏感,不能写成
Launch.json或launch.JSON - 如果项目用了多根工作区(workspace file),
launch.json应放在各子文件夹各自的.vscode中,或统一放在 workspace 根目录的.vscode
手动创建 launch.json 容易漏掉哪些字段
直接新建 JSON 文件手写,大概率缺关键字段,导致断点不触发、环境变量不生效、甚至调试器根本启动不了。最常被忽略的是:
-
configurations数组为空或缺失:VSCode 要求它至少包含一个对象,且该对象必须有name、type、request -
cwd未设置:Node.js 或 Python 项目里,模块导入失败、require()报错、open("config.json")找不到文件,往往是因为没设"cwd": "${workspaceFolder}" -
console用默认值:"console": "internalConsole"会导致console.log不显示、process.stdin阻塞,应显式设为"integratedTerminal" -
env写成字符串而非对象:比如"env": "NODE_ENV=dev"是错的,必须是"env": {"NODE_ENV": "dev"}
怎么让不同环境的配置不互相覆盖
一个 launch.json 可以同时存多个调试配置,靠 configurations 数组里的多个对象实现。关键不是“怎么存”,而是“怎么不混”:
- 每个配置的
name必须唯一,且带明确语义,例如"Debug (dev, nodemon)"、"Attach to staging API",避免都叫"Launch" -
request字段决定行为本质:"launch"启动新进程,"attach"连接已有进程,二者不可互换 - 端口、环境变量、启动参数要按环境区分:比如
dev用9229,staging用9230;env里分别写"NODE_ENV": "development"和"NODE_ENV": "staging" - 别把多个配置写成一个对象里的嵌套字段,例如
"dev": { ... }是无效语法,VSCode 直接忽略
保存后调试还是不生效?先查这三处
改完 launch.json 并保存,不代表立刻可用。常见“已保存但无效”的真实原因:
-
program路径指向不存在的文件:比如 TypeScript 项目写了"program": "./src/index.ts",但 Node.js 只能执行.js;正确做法是配"type": "pwa-node"+"runtimeExecutable": "ts-node",或确保program指向编译后的dist/index.js - 调试器插件没装或禁用:Node.js 需要
JavaScript Debugger (Nightly)或官方Debugger for Node.js;C++ 需要C/C++扩展且系统已装gdb/lldb;插件未启用时,VSCode 不报错,只是静默跳过 - 断点所在行不可执行:比如写在
import前、空行、注释行,或 TypeScript 源码未生成有效 sourcemap(检查dist/index.js.map是否存在,tsconfig.json里"sourceMap": true是否开启)
真正容易被忽略的是:launch.json 不是“写完就跑”,它依赖整个调试链路对齐——从文件路径、编译产物、sourcemap、到调试器进程本身。少一环,断点就变空心圆,而错误提示常常藏在输出面板的“调试控制台”或“终端”里,不在弹窗中。











