断点不生效八成因调试未启动:需确保debugpy已安装、状态栏显示完整解释器路径、按f5而非code runner运行,且launch.json中"type"(小写)、"program"/"module"、"console"(推荐"integratedterminal")三项配置正确。

断点打了却没停,八成是调试根本没跑起来——debugpy 没装、解释器路径不对、launch.json 里 "type"/"program"/"console" 三项中至少有一项配错了。
断点不生效?先查这三处硬性条件
VSCode 行号旁的红点只是标记,不是执行指令。它要起作用,必须同时满足:
-
debugpy必须已安装:运行python -m pip install debugpy,别依赖 Python 扩展自动装(某些精简环境会漏) - 底部状态栏必须显示真实解释器路径(如
C:\myproj\.venv\Scripts\python.exe),不能是模糊的“Python 3.11.9 64-bit” - 你按的是 F5 或左侧调试图标里的 ▶️,不是右上角 Code Runner 的绿色三角——后者根本不走调试协议,纯终端执行
常见现象:F5 启动后控制台刷完日志就退出,光标没停在断点行。这时优先查这三项,比反复重打断点更有效。
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 行反复加载,看起来像卡死。
多线程场景下(如 threading.Thread),还需加 "subProcess": true,否则子线程断点不会触发。这不是代码问题,是调试器默认不监听子线程上下文。
验证是否生效:用最小脚本测试,别直接上大项目。例如在 print("break here") 前打断点,确保 "subProcess": true 和 "justMyCode": false 都已启用。
条件断点和日志点怎么写才安全?
条件断点只能写纯表达式,不能写语句。VS Code 每次执行到该行时求值表达式,为 True 才暂停。禁止 print、赋值、if、注释等副作用操作。
-
epoch == 5✅ 合法:纯比较表达式 -
"train" in mode✅ 合法:成员判断 -
len(data) > 100✅ 合法:函数调用(只要无副作用) -
data.append(1)❌ 禁止:改变状态
日志点支持 {x} 或 {loss:.4f} 插值,但括号内必须是可安全求值的表达式。{model.predict(x)} 或 {os.getcwd()} 会报 Expression evaluation error。
真正容易被忽略的是:条件断点失效时,VS Code 往往不报错,只是静默跳过——你得靠最小脚本+打印确认它到底有没有被识别。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











