断点不生效主因是launch.json配置错误,尤其是type、program、cwd字段与实际运行方式不匹配,或Python解释器未正确选择;需检查justMyCode设置、入口结构(program/module)、工作目录及调试器扩展是否启用。

断点不生效,八成不是你点错了位置,而是 launch.json 里某个关键字段和你实际运行方式对不上——尤其是 type、program 或 cwd 配错了,或者根本没选对 Python 解释器。
断点灰色、点击无效、F5直接跑完?先查 justMyCode 和入口结构
VSCode 默认只调试“你的代码”,但前提是它得认出哪部分是“你的”。如果脚本没写 if __name__ == "__main__":,或你用 python -m mypackage 启动,而 launch.json 却配了 "program": "${file}",断点大概率被过滤掉。
-
"justMyCode": false是最快验证手段:加到配置里,重启调试。能停住就说明是入口识别问题 - 长期方案:统一用标准入口结构,或改用
"module": "mypackage"+"args",别硬塞命令行到program - 注意:
"justMyCode": false会进入site-packages,调试变慢,仅用于排查,别留着上线
program 和 module 到底怎么选?看你是怎么在终端里跑的
VSCode 不读你心里想的命令,它只按 launch.json 字面执行。你在终端敲 python src/app.py,就得配 "program": "${workspaceFolder}/src/app.py";敲 python -m flask run,就得配 "module": "flask" + "args": ["run"]。
-
"program":对应直接执行脚本,路径必须真实存在,且cwd要匹配导入逻辑(比如from utils import helper要求utils/在sys.path里) -
"module":对应python -m xxx,模块名必须可 import,建议配合pip install -e .安装本地包 - 常见翻车:
"program": "-m http.server"—— 这会被当成文件名去找,报File not found;正确写法是"module": "http.server"
cwd 配错,ImportError 和 FileNotFoundError 就跟着来了
Python 的 import 和 open("config.yaml") 都依赖当前工作目录。VSCode 默认以工作区根目录为 cwd,但你的代码可能期望在 src/ 下运行。
立即学习“Python免费学习笔记(深入)”;
- 验证方法:在代码开头加
import os; print(os.getcwd()),对比终端里cd src && python app.py的实际路径 - 推荐写法:
"cwd": "${workspaceFolder}/src",而不是靠"program": "./src/app.py"猜路径 - 漏掉
"console": "integratedTerminal"?像http.server这种要交互的模块会卡死不动
修改 launch.json 后断点还是不生效?别跳过这三步
配置改了≠立刻生效。VSCode 的调试状态有缓存,环境也容易“假连接”。
- 看左下角 Python 解释器路径:必须和你终端里
which python或where python一致,且指向虚拟环境内的解释器(如./venv/bin/python) - 确认已安装官方
ms-python.python扩展,Pylance 不管调试 - 改完
launch.json必须重启调试会话(Stop → F5),热重载不生效
最常被忽略的其实是 cwd 和解释器路径的实时一致性——它们不像代码能 git diff 出来,一错就是静默失败。


















