断点不生效主因是debugpy未安装、解释器路径错误或launch.json关键字段错误;需确认debugpy已装、状态栏显示真实路径、F5触发调试而非Code Runner,且launch.json中"type"、"program"/"module"、"console"三项正确。

断点不生效,基本不是你打错了位置,而是调试根本没真正跑起来——debugpy 没装、解释器路径错、launch.json 里关键字段写错,三者占90%以上原因。
为什么F5点了却直接跑完?先查这三项硬性条件
VSCode 行号旁的红点只是标记,不是执行指令。它要起作用,必须同时满足:
-
debugpy必须已安装:运行python -m pip install debugpy,别依赖 Python 扩展自动装(某些精简环境会漏) - 底部状态栏必须显示真实解释器路径(如
C:\myproj\.venv\Scripts\python.exe),不能是模糊的“Python 3.11.9 64-bit” - 你按的是 F5 或左侧调试图标里的 ▶️,不是右上角 Code Runner 的绿色三角——后者根本不走调试协议,纯终端执行
launch.json 中必须核对的三个字段
其他字段可后续加,但以下三项写错,断点基本废掉:
-
"type": "python":大小写敏感,不能写成"Type"或"Python" -
"program": "${file}"或"module": "mypackage.main":前者适合单脚本(如main.py),后者适合包结构(如用python -m mypackage.cli启动);混用会导致模块导入失败,断点白设 -
"console": "integratedTerminal":设成"externalTerminal"在 Windows 上极易因权限/路径失败;先用集成终端保底
如果项目源码在 src/ 下,还建议显式加 "cwd": "${workspaceFolder}/src",否则 import myproject.core 会报 ModuleNotFoundError。
变量看不清、断点跳过自己写的模块?改这个开关
默认 "justMyCode": true 会让调试器只跟踪当前文件和明确入口的代码,跳过 import 进来的模块(比如 src/utils.py)。
- 想调试
utils.py里的函数?把"justMyCode"改成false - 但别在第三方库(如
torch.nn)里打点再设false——调试器会在import行反复加载,看起来像卡死 - 变量显示为空?先确认它是否在当前栈帧可见:比如你在
worker()函数里设断点,却想看全局CONFIG,而它根本没被import进该模块 - 多线程场景下(如
threading.Thread),还需加"subProcess": true,否则子线程断点不会触发
条件断点怎么设才安全?避开副作用陷阱
右键断点选「编辑断点」输表达式很直观,但容易踩坑:
- 条件表达式只能读,不能改:写
i += 1或print("hit")不仅无效,还可能导致断点失效或跳过 - 日志点(Logpoint)模板如
"Processing item {i}: {items[i]}"是非中断式输出,适合高频循环,但注意花括号内必须是当前作用域可访问的变量名 - 命中次数断点(Hit Count)比布尔条件更轻量,例如设
100表示第100次到达时中断,适合排查偶发问题
最常被忽略的一点:条件断点的表达式求值发生在目标进程上下文中,若引用了尚未初始化的变量,整个条件会被视为 false 而跳过——它不会报错,只会静默失效。


















