断点不生效主因是node未被VSCode识别或program路径错误:需在.vscode/settings.json中配置PATH确保node可用,program必须指向真实JS文件(如"${workspaceFolder}/dist/index.js"),TS项目须配sourceMaps、outFiles及resolveSourceMapLocations。

断点不生效?先确认 node 是否真在 VSCode 的 PATH 里
VSCode 调试器启动时,会独立加载环境变量,和你在终端里看到的 node -v 输出可能不一致。如果断点全灰、点不进去,或者调试器报 Cannot find runtime 'node' on PATH,这不是插件问题,而是它根本找不到 node 命令。
- 在 VSCode 内置终端(
Ctrl + `)里执行which node,记下完整路径(比如/opt/homebrew/bin/node) - 把这行加进项目根目录的
.vscode/settings.json:"terminal.integrated.env.osx": {"PATH":"/opt/homebrew/bin:${env:PATH}"}(Windows 对应terminal.integrated.env.windows,路径填C:\Program Files\nodejs\) - 改完必须彻底退出 VSCode(不是关窗口,是杀进程),再从终端启动:
code . - 验证:重启后,在终端运行
node -v和调试器启动时都应有输出
launch.json 中 program 字段写错,断点永远不触发
program 不是命令行参数,也不是相对路径语法,它必须指向一个真实存在的、Node 可直接执行的 JS 文件(不能是 .ts、.jsx 或未编译的源码)。
- 正确写法:
"program": "${workspaceFolder}/dist/index.js"(推荐用变量,避免硬编码) - 错误写法:
"program": "src/index.js"(缺${workspaceFolder}/,VSCode 找不到) - 错误写法:
"program": "./src/index.js"(.在这里不被解析,等同字面量) - TypeScript 项目:别写
src/index.ts;要么编译后指向dist/index.js,要么配preLaunchTask触发tsc - ESM 项目:确保
package.json里有"type": "module",否则import会报Cannot find module
TypeScript 断点停在 JS 行,而不是你写的 TS 行
源码映射链路断了,VSCode 不知道 .ts 和 .js 怎么对应。
- 确保
tsc编译时生成.map文件:"sourceMap": true在tsconfig.json里已启用,且禁用"inlineSourceMap": true -
launch.json中必须同时配:"sourceMaps": true和"outFiles": ["./dist/**/*.js"] - 如果源码不在根目录(如
packages/foo/src),还要加"resolveSourceMapLocations"显式放行源码路径:["${workspaceFolder}/packages/**/src/**", "!**/node_modules/**"] - 验证方式:启动调试后打开「调试控制台」,搜索
Loaded source map from——看到路径且无 404 才算真正就位
条件断点怎么设才真正起作用
右键断点红点 → Edit Breakpoint,输入表达式即可。但不是所有写法都支持——调试器只做布尔求值,不执行函数调用。
- 支持:
i > 10、user?.id === 123、!Array.isArray(data) - 不支持:
console.log('hit')、fetch('/api/test')、process.env.NODE_ENV === 'dev'(环境变量在断点上下文中不可访问) - 复杂逻辑建议拆成简单布尔表达式,避免嵌套过深或依赖副作用
- 注意:条件断点仅在
request: "launch"模式下稳定生效;attach模式下部分 Node 版本存在兼容性波动
outFiles 和 resolveSourceMapLocations 的路径精度——差一个斜杠或通配符层级,TS 断点就永远停在 JS 上。


















