VS Code调试失败主因是launch.json配置错误:program、cwd或runtimeExecutable路径无效;断点失效多因sourceMap缺失或错配;DEBUG CONSOLE仅支持表达式求值,日志应看TERMINAL;环境变量需手动在env中配置。

调试器连不上 launch.json 配置错在哪
VS Code 调试启动失败,八成是 launch.json 里 program、cwd 或 runtimeExecutable 指向了不存在的路径或错误的可执行文件。
常见错误现象:Cannot find runtime 'node' on PATH、Could not find file xxx.js、点 ▶️ 后没反应也没报错。
-
program必须是绝对路径或相对于cwd的正确相对路径;用${workspaceFolder}安全,别手写./src/index.js然后忘了当前工作目录在哪 - Node.js 项目别漏掉
runtimeExecutable:如果用了 nvm 或 pnpm,node可能不在默认 PATH,得填${env:HOME}/.nvm/versions/node/v18.18.2/bin/node这类明确路径 - Python 用户注意:
python值不是 Python 文件路径,而是解释器路径;用which python3或 VS Code 的 Python 扩展自动检测功能确认真实路径
breakpoint 不生效:代码没被加载 or 源码映射失效
断点变空心圆、灰色、或提示 Unbound breakpoint,说明调试器根本没把源码和运行时代码对上。
使用场景:TypeScript、Webpack/Vite 构建项目、ESM + node --loader 等。
- TypeScript 项目必须生成
.map文件:检查tsconfig.json中sourceMap: true和outDir是否匹配launch.json的program - Vite 项目默认不输出 map 到磁盘,得在
vite.config.ts加build.sourcemap: 'inline'或'hidden',否则 VS Code 看不到映射 - Node.js 用 ESM 时,
node --loader ts-node/esm类方案容易让调试器找不到原始.ts文件,建议改用ts-node --inspect启动并配好resolveSourceMapLocations
调试控制台输不了命令 / console.log 看不见输出
调试控制台(DEBUG CONSOLE)不是终端,它只支持表达式求值和简单变量查看,不能运行 npm run dev 这类 shell 命令。
性能影响:频繁在 DEBUG CONSOLE 执行复杂对象展开(比如 hugeArray.map(...))会卡住调试器,甚至导致断点失效。
- 想看日志?优先用
console.log()输出到 TERMINAL 的 “Debug” 标签页,那里才是真实 stdout/stderr - DEBUG CONSOLE 里查变量要克制:输入
user.profile.address.city没问题,但别输JSON.stringify(largeData)—— 它会同步阻塞整个调试进程 - Node.js 调试中,
process.env默认不继承你终端里的环境变量;需要手动在launch.json里加env字段,否则console.log(process.env.NODE_ENV)总是undefined
重启调试就丢断点:工作区设置 vs 用户设置冲突
断点消失不是 VS Code 坏了,是它按“当前工作区是否启用调试状态保存”来决定要不要记住断点。
容易踩的坑:你关了某个文件,再打开,断点没了;或者换了个分支,断点还在老位置但代码已删 —— 这时候 VS Code 自动清除了它,但没提示。
- 检查
.vscode/settings.json有没有"debug.saveBeforeStart": false,这个设为false不影响断点,但可能让你误以为“改了代码没生效” - 真正管断点持久化的是
"debug.enableAllHovers"无关,关键是 VS Code 是否识别当前为“活跃调试会话”;如果launch.json里noDebug: true,那所有断点都会被忽略 - 多人协作项目,别把
.vscode/提交进 Git;但launch.json可以提交 —— 只要里面不写死绝对路径或敏感环境变量
最麻烦的其实是 sourcemap 嵌套层数太多,比如 ts → babel → swc → esbuild → node,中间任一环 map 错位,断点就永远对不准。这种时候别硬调,先用 node --inspect-brk + Chrome DevTools 对齐一次,再切回 VS Code。










