断点不生效八成因launch.json配置错误:type必须小写"python"且request为"launch",program与module二选一不可混用,args须为json数组,cwd和justmycode设置不当也会导致失效。

断点不生效,八成不是你点错了位置,而是 launch.json 里关键字段和你实际运行方式对不上——尤其是 type、program、module、args、cwd 这几个参数配错一个,F5 就等于白按。
type 和 request 必须是 "python" 和 "launch"
type 字段必须小写写成 "python",不能是 "Python"、"PYTHON" 或 "node";request 推荐用 "launch"(启动新进程),不是 "attach"(除非你真在 attach 已有进程)。VSCode 不会自动纠正大小写或类型,配错就直接跳过调试逻辑,控制台连 Python 启动日志都不会打。
- 检查扩展:确保已安装并启用
ms-python.python,仅装pylance不行 - 左下角状态栏的 Python 解释器版本必须和你项目环境一致,否则
program路径解析、包导入全乱套 - 如果从其他语言模板复制配置,务必手动改掉
type,别信“自动识别”
program 和 module 二选一,不能混用
你在终端敲 python src/main.py,就配 "program": "${workspaceFolder}/src/main.py";敲 python -m flask run,就配 "module": "flask" + "args": ["run"]。两者语义完全不同:program 是文件路径,module 是可 import 的模块名。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
-
"program": "-m http.server"是典型错误——调试器会把它当文件名去找,报File not found;正确写法是"module": "http.server" -
"program": "./src/app.py"可能失败,因为.在 JSON 里不被解析为当前目录;一律用${workspaceFolder}/src/app.py - 用
module模式时,确保该模块能被 import:比如myproject.cli要求myproject/在PYTHONPATH或当前cwd下,推荐先pip install -e .
args 是字符串数组,不是拼在 program 后面
args 字段只在 F5 调试时生效,且必须是 JSON 数组格式。它不会影响右键 “Run Python File”,也不会被 program 字符串解析——所以千万别写成 "program": "main.py --input data.txt"。
- 正确示例:
"args": ["--input", "data.txt", "--verbose"] - 含空格的值直接写,如
"--name", "Alice Smith",引号是 JSON 语法需要,不传给 Python - 参数本身要带引号(比如 JSON 字符串),需双重转义:
"--config", "{\"port\":8080}" - 所有参数解析逻辑(
argparse或sys.argv)必须放在if __name__ == "__main__":块内,否则会在 args 生效前就执行并报错
cwd 和 justMyCode 是隐形杀手
cwd(current working directory)决定 import 查找路径和 open("config.yaml") 的相对路径起点;justMyCode 控制是否进入第三方代码,默认 true 会跳过 site-packages,导致断点“看起来没停住”。
- 对比终端命令:如果你习惯
cd src && python app.py,那cwd应设为${workspaceFolder}/src,而不是默认的根目录 -
"justMyCode": false是快速验证手段:加进去重启调试,能停住就说明是入口识别或过滤问题;但别留着,它会让调试变慢、变量面板塞满 requests/flask 源码 - Web 服务类脚本(如 Flask、FastAPI)常卡死,往往是因为漏了
"console": "integratedTerminal",导致 stdout/stdin 阻塞
最易忽略的是:改完 launch.json 后没用 F5 重新启动调试会话,或者误点了右上角 ▶️(那是运行,不是调试);断点打在函数定义行、装饰器、空行上,VSCode 会悄悄偏移到下一行——但有时偏移失效,结果就停不住。实心红点才是真绑定,空心圆等于没连上。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










