断点不生效一定是未启动调试协议;必须按f5或点击调试图标▶️启动调试会话,而非使用code runner绿色三角或终端执行,同时确保launch.json中type、program/module、cwd配置正确且路径真实存在。

断点设了但代码不暂停,一定是没走调试协议
VSCode 里点行号左边加红点只是标记位置,F5 启动的是调试会话,右上角绿色三角(Code Runner)或终端里敲 node app.js 是普通执行——两者完全不走同一套机制。断点只在调试协议下生效,普通运行时它就是个装饰。
确认是否真在调试:看左下角状态栏有没有显示「调试中」字样;没看到就说明你还在“跑代码”,不是“调代码”。
- 必须打开「运行和调试」侧边栏(
Ctrl+Shift+D/Cmd+Shift+D),选中一个配置再点 ▶️ - 如果配置列表为空,点齿轮图标生成
.vscode/launch.json,别跳过这步 - 红点要是空心的(灰色或浅红),鼠标悬停提示
Unbound breakpoint,代表断点根本没加载进当前调试上下文
launch.json 配置错一个字段,断点就失效
launch.json 不是可有可无的配置文件,它是 VSCode 调试器发给底层调试器(如 debugpy、js-debug)的指令单。写错就等于让调试器去错地方找代码。
-
type:大小写敏感。"python"不能写成"Python";Node.js 项目用"pwa-node"(新版推荐),不是"node" -
program(Node.js)或module(Python):路径必须绝对且真实存在。用"${workspaceFolder}/src/index.js",别用"./index.js"(相对路径依赖cwd,极易出错) -
cwd:决定require()、import和文件读写起点。Node 报Cannot find module、Python 报ModuleNotFoundError,八成是这里设错了目录
TypeScript / 前端项目断点偏移,根源在 sourceMaps
你在 src/App.tsx 第 23 行设断点,结果停在 dist/main.8a3f2.js 第 1 行——这不是 VSCode 故障,是源码映射链断了。断点需要靠 .map 文件把编译后代码和原始源码对齐。
- TypeScript:确认
tsconfig.json中"sourceMap": true,且没开"inlineSourceMap": true(VSCode 更认独立.map文件) - Vite:检查
vite.config.ts中build.sourcemap: true,并确认开发服务器(vite dev)确实跑在${workspaceFolder}下 - Node.js 调试:
launch.json中显式加"sourceMaps": true,否则默认可能不启用 - 前端调试加
"webRoot": "${workspaceFolder}",确保浏览器 DevTools 能按路径找到源码
条件断点和日志点不是炫技,是避免手动点十次 F10 的刚需
循环体里只想看第 7 次迭代?对象某个字段为 "pending" 才停?硬等太耗时间,也容易错过上下文。VSCode 原生支持这些能力,不用改一行源码。
- 右键断点 →
Add Conditional Breakpoint→ 输入i === 7或user.status === "pending" - 右键断点 →
Add Log Point→ 输入"id: {user.id}, status: {user.status}",只输出不中断 - 条件表达式禁止调用函数(如
getUser()),只允许字面量、比较、逻辑运算;否则行为不可预测,甚至跳过断点 - 日志点输出进「调试控制台」,不是终端也不是浏览器 Console,别找错地方
F5 和 ▶️,而不是绿色三角。另外,launch.json 里 program 和 cwd 的路径写法,稍有偏差就会让断点彻底失联,这点比语言特性还关键。











