断点需启动调试会话才生效;常见失效原因是误用运行而非调试,且必须配置正确的launch.json和sourcemaps;命中次数、条件及日志断点可提升调试效率。

断点本身不运行代码,只标记暂停位置;必须启动调试会话(F5 或 ▶️)才能生效,否则点再多红点也没用。
断点为什么点了没反应?
最常见原因是误把“运行”当“调试”:点击右上角绿色三角(Run Code)、终端执行 node index.js 或 python main.py,断点完全不会触发——这些是普通执行,没走调试协议。
- 必须打开“运行和调试”侧边栏(
Ctrl+Shift+D/Cmd+Shift+D),选中一个配置,再点 ▶️ 启动 - 如果配置列表为空,点齿轮图标生成
.vscode/launch.json,别跳过这步 - 断点启用状态看颜色:实心红点 ✅ 表示已激活;空心红点 ❌ 表示未加载进当前调试会话
-
launch.json里type、program(Python)或file(Node.js)、cwd三者写错一个,90% 断点不生效
Node.js 调试必须配 sourceMaps 吗?
不是“必须”,但 TypeScript、Webpack、Vite 项目几乎一定需要,否则断点会偏移或消失——你打在 index.ts 第12行,结果停在编译后 index.js 第3行甚至直接跳过。
- TypeScript:确认
tsconfig.json中"sourceMap": true,且不要设"inlineSourceMap": true(VSCode 更认独立.map文件) - Webpack/Vite:构建时加
devtool: 'source-map'或build.sourcemap: true,并检查.js.map文件是否真实生成、与.js同目录 - Node.js 调试:在
launch.json里显式加"sourceMaps": true,否则默认可能不启用
怎么跳过循环前49次,只在第50次停?
别手动按十次 F5。直接用命中次数断点(Hit Count),这是高频调用场景的刚需。
- 右键行号左侧断点 → 选择“编辑断点” → 输入数字
50(表示第50次命中时暂停) - 也支持更灵活语法:
>= 50(第50次及之后都停)、% 10 === 0(每10次停一次) - 注意:表达式里不能访问尚未声明的变量,也不能跨函数引用局部变量
- 条件断点(如
i === 50)和命中次数断点互斥,编辑前得删掉另一个,否则逻辑是“或”关系
想看变量值又不想中断程序,怎么办?
用日志断点(Log Message),它不暂停执行,只往调试控制台输出内容,比临时加 console.log 干净得多。
- 右键断点 → “编辑断点” → 输入日志模板,比如
"i = ${i}, user.name = ${user?.name}" - 支持插值语法
${...},里面可写任意表达式,作用域和普通断点一致 - 适合快速跟踪循环变量、API 响应结构、对象字段变化等低干扰场景
真正容易被忽略的是 cwd 和 sourceMaps 的组合影响:cwd 错了,Node.js 读不到 package.json 或 node_modules;sourceMaps 没对齐,断点就打在空气里——这两者一错,调试器连“该停哪儿”都不知道。











