断点失效主因是调试链路中断,90%源于launch.json配置错误:type须小写准确、program与module不可混用、console推荐integratedterminal。

断点打上去是空心圆、F5 启动后直接跑完、控制台没报错也没停——这不是代码问题,是调试链路某处断了。90% 的情况,VSCode 根本没把断点注册进运行时上下文。
launch.json 配置错三处,断点必然失效
这个文件是调试启动的唯一依据,写错一个字段,VS Code 就会静默跳过所有断点。
-
"type"必须小写且准确:"python"、"node"、"cppdbg"—— 写成"Type"或"Python"会导致调试器压根不加载对应适配器 -
"program"和"module"不能混用:单脚本用"program": "${file}";包结构(如python -m mypkg.cli)必须用"module": "mypkg.cli",否则 import 失败,断点设了也进不去 -
"console"推荐固定为"integratedTerminal":"externalTerminal"在 Windows 上常因权限或路径解析失败,导致进程启动即退出
调试器根本没连上目标进程
断点不是“设了就生效”,而是“调试器成功 attach 并识别源码行”之后才可能命中。空心圆本质是“未绑定”,不是“没运行”。
- Node.js 必须由 VS Code 启动,或手动加
--inspect-brk=9229后 attach;直接node app.js启动,断点永远无效 - Unity 调试不是连 Editor,而是连它后台拉起的
debuggeragent进程(Mono 默认端口56000,.NET Core 默认57000),端口不匹配或防火墙拦截,断点就悬空 - C++/Rust 等编译型语言,若二进制里没调试符号(
-g缺失或用了-O2),GDB/LLDB 就找不到源码行映射,断点自然无法绑定
source map 或路径映射错位,断点“看不见自己写的代码”
你打在 src/index.ts 上,VS Code 却要去 dist/index.js 里找对应位置——中间全靠 source map 文件串联。任一环节路径错,断点就失效。
- TypeScript 项目:确认
tsconfig.json含"sourceMap": true,且"outDir"和"rootDir"明确(不能留空或写"./") - Webpack/Vite 用户:
devtool: 'source-map'(非eval-source-map),并检查磁盘上是否真生成了.map文件(不是只在内存里) - launch.json 中
"outFiles"必须匹配 JS 输出路径,例如["${workspaceFolder}/dist/**/*.js"];漏写或通配错误,VS Code 就加载不到 map
变量看不清、断点跳过自己写的模块?别急着重装插件
这是 "justMyCode": true 的默认行为,不是 bug。它只跟踪“明确入口”和“当前工作区文件”,跳过所有通过 import 引入但未被直接执行的模块。
- 想调试
src/utils.py里的函数?把"justMyCode"改成false,但别对torch、requests这类第三方库这么做——调试器会在import行反复加载,看起来像卡死 - 多线程场景(如
threading.Thread)需显式加"subProcess": true,否则子线程断点不会触发 - 条件断点里不能写副作用语句:
i += 1或print("hit")不仅无效,还可能导致断点跳过或失效
最常被忽略的是:路径含中文或空格(尤其 Windows)、项目没放在纯英文无空格路径下(如 C:\dev\myproj),debugpy 和 node --inspect 都会静默失败。这不是配置问题,是底层协议对路径编码的硬限制。











