VSCode断点无效是因为未进入调试模式,必须通过F5启动并配置正确的launch.json,且红点需为实心才生效;F9/F10/F11仅在调试暂停时有效;调试控制台和变量面板可辅助验证逻辑。

断点设了但代码照常跑完,说明你根本没进调试模式——VSCode 里“运行”和“调试”是两条完全不同的通路,点绿色三角(Code Runner)或终端敲 node、python 都不触发断点。
按 F5 前必须有 launch.json
VSCode 不会自动猜你要怎么跑代码。F5 启动的是调试协议,依赖 .vscode/launch.json 里的配置。没这个文件,F5 就只是弹个错误提示。
- 首次按 F5,VSCode 会弹窗让你选环境(如
Node.js、Python、Chrome),选完自动生成基础配置;跳过这步,后续所有断点都无效 -
launch.json里最关键的三个字段:"type"(比如"node")、"request"(固定为"launch")、"program"或"module"(路径必须对,推荐用"${workspaceFolder}/src/index.js") - Python 项目如果用
python -m mypkg启动,就得写"module": "mypkg",不能硬塞"program"
红点实心才算真绑定
行号左边点出的红点,只是“标记”。它变成实心(✅)才表示调试器已加载该行、能真正中断;空心(❌)就是 Unbound breakpoint,等于没设。
- 常见导致空心的原因:文件没保存、语言模式不是对应语言(右下角看是不是
JavaScript而不是Plain Text)、TypeScript 没开sourceMap: true - Node.js 项目要手动在
launch.json加"sourceMaps": true,否则断点停在编译后代码上,变量名全是_a、_b - 前端项目(Vite/Webpack)还要确认构建时生成了
.js.map文件,且和.js同目录
F9/F10/F11 是调试会话里的操作,不是全局快捷键
这三个键只在调试已启动、程序暂停时才有效。F5 启动后卡在第一个断点,这时才能用;否则按了没反应,不是快捷键坏了,是还没进入调试上下文。
-
F9:切换当前行断点(设/删),比鼠标点快,且不依赖悬停菜单 -
F10(Step Over):执行当前行,遇到函数不进去,直接到下一行 -
F11(Step Into):遇到函数就钻进去,但如果函数来自node_modules或压缩代码,可能跳不过——这时得检查launch.json里是否配了"skipFiles"
调试控制台和变量面板不是摆设
暂停后别只盯着代码,左侧 Variables 面板展开 Local 看当前作用域变量,悬停变量名也能浮出值;想试表达式,切到 Debug Console(Cmd+Shift+Y 或 Ctrl+Shift+Y)直接输 data.length 或 arr.filter(x => x > 10)。
- 双击变量值可以直接修改,比如把
count = 0改成count = 100,接着跑,验证分支逻辑 - 在
Watch面板点 + 号加表达式,比如user.permissions.includes("admin"),不用每次手动查 - 条件断点里别写副作用代码,比如
i++或console.log()——调试器求值顺序不确定,可能跳过或重复执行
最难的从来不是点红点,而是确保从 launch.json 到源码映射再到调试器插件,整条链路没断。一个字段错、一个配置漏、一个扩展没装,断点就只是红点而已。


















