断点不生效主因是launch.json配置错误,尤其是program、module、cwd三者与终端实际执行命令不一致,或justmycode过滤导致;需确认调试会话启动、选对配置项、显式设置console和justmycode。

断点不停,八成不是代码写错了,而是 VSCode 根本没按你预期的方式启动 Python 进程——launch.json 里 program、module、cwd 三者只要一个和你终端里实际执行的命令不一致,断点就形同虚设。
断点是空心红点?先确认调试会话真启动了
空心圆点 = 断点未加载,VSCode 没识别到调试上下文。这不是配置问题,是流程卡在第一步:
- 必须点击左侧“运行和调试”面板里的绿色 ▶️(不是右上角 Code Runner 的三角)
- 确保顶部配置下拉菜单选中的是你改过的那个
configuration,不是自动生成的旧项 - 如果面板显示 “No Configurations”,说明
.vscode/launch.json根本不存在——点齿轮图标生成,别跳过
program 和 module 必须严格对应你的终端命令
VSCode 不读你心里想的命令,它只照 launch.json 字面执行。你在终端敲什么,这里就得配什么:
- 终端执行
python src/app.py→ 配"program": "${workspaceFolder}/src/app.py",且"cwd": "${workspaceFolder}"要匹配导入路径(比如from utils import helper要求utils/在sys.path里) - 终端执行
python -m flask run→ 配"module": "flask"+"args": ["run"],绝不能写"program": "-m flask run"(会被当文件名去找,报File not found) - 用
pip install -e .安装的包,必须用module模式;直接双击运行脚本,才考虑program模式
cwd 配错,ImportError 和 FileNotFoundError 就跟着来
Python 的 import 和 open("config.yaml") 都依赖当前工作目录。VSCode 默认以工作区根为 cwd,但你的代码可能期望在 src/ 下运行:
- 对比终端里
cd src && python app.py的实际路径,再决定"cwd"值 - 推荐显式写
"cwd": "${workspaceFolder}/src",而不是靠"program": "./src/app.py"猜路径 - 如果模块导入仍失败,加
"env": {"PYTHONPATH": "${workspaceFolder}/src"}更可靠
justMyCode 是默认过滤器,不是 bug
断点灰色、点击无效、F5 直接跑完?大概率是 justMyCode 把你的模块当第三方代码过滤掉了:
-
"justMyCode": false是最快验证手段:加进去,重启调试。能停住就说明是入口识别问题 - 长期方案是统一入口结构(比如加
if __name__ == "__main__":),或改用module模式配合pip install -e . -
"justMyCode": false会让调试器进入site-packages,启动变慢、堆栈变长,仅用于排查,别留着上线
最常被忽略的其实是 console 字段——漏掉 "console": "integratedTerminal",像 http.server 这种要交互的模块会卡死不动;改完 launch.json 后不重启调试会话,缓存状态会让所有修改都白做。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











