Python调试需满足三条件:正确安装启用ms-python.python扩展、launch.json配置准确(program/module路径无误且指定Python解释器)、断点设在可执行语句上;justMyCode和subProcess默认限制调试范围,须手动开启。

能调试,但前提是解释器选对、launch.json配准、断点设在可执行行上——三者缺一不可。很多“F5没反应”或“断点变空心”的问题,其实卡在这三个地方中的某一个。
Python扩展没装对或没启用
VSCode本身不带Python调试能力,ms-python.python扩展必须安装且启用。只装了ms-python.pylance(负责补全和类型检查)是不够的,它完全不提供调试功能。
- 按
Ctrl+Shift+X(Win/Linux)或Cmd+Shift+X(Mac),搜“Python”,确认发布者是 Microsoft、名字含“Python”、状态为“已启用” - 装完必须重启 VSCode,否则 F5 仍弹出“没有配置启动项”
- 如果命令面板里输
Python: Select Interpreter没响应,基本就是扩展没装对或被禁用
launch.json里program或module写错
VSCode 调试 Python 主要靠两种模式:program(运行脚本文件)和 module(运行模块,如 python -m http.server)。混用或路径写错,断点就永远不命中。
- 用
program模式时,"program": "src/main.py"是相对工作区根目录的路径,不能写./src/main.py或绝对路径 - 用
module模式时,"module": "myproject.cli"填的是模块名,不是myproject/cli.py - 默认生成的
${file}很方便,但只适用于当前打开的单个脚本;项目结构复杂时,必须显式写死路径或改用module - 虚拟环境路径不对?在
launch.json里加"python": "./venv/bin/python"(Linux/macOS)或"python": ".\venv\Scripts\python.exe"(Windows)
断点设在无效位置导致“未命中”
Python 调试器只在实际会执行的语句上生效。装饰器、函数定义首行、空行、注释这些地方设的断点,VSCode 会自动偏移到下一行,但有时偏移错误,尤其遇到多行 if、lambda 或带参数的装饰器时。
立即学习“Python免费学习笔记(深入)”;
- 最稳妥的做法:把断点设在变量赋值(
x = 1)、函数调用(print())、return或raise这类明确有副作用的语句上 - 看到断点变空心圆?右键点击 → “编辑断点”,检查是否误加了条件(
hitCount)或表达式(condition) - 异步代码(如
async def)中,需在launch.json中加"subProcess": true才能捕获子任务里的断点 -
justMyCode默认为true,想进标准库或第三方包源码(比如看requests.get内部),得设成false,并确保对应.py文件存在(不是只有.pyc)
Web服务类脚本启动后就卡住或反复重启
Flask、FastAPI、Django 的开发服务器默认开启重载(reloader)和多进程,VSCode 调试器 attach 不上子进程,导致 app.run() 或 uvicorn.run() 后断点失效、控制台无响应。
- Flask:启动时显式关掉重载,
app.run(debug=False, use_reloader=False) - FastAPI / Uvicorn:传参
reload=False,例如uvicorn.run("main:app", reload=False) - 如果必须保留重载,考虑用
console: "integratedTerminal"配合手动python -m debugpy --wait-for-client ...方式 attach,但复杂度陡增 - 工作目录(
cwd)不对也会引发导入失败,可在launch.json中加"cwd": "${workspaceFolder}/src"显式指定
真正容易被忽略的,是 justMyCode 和 subProcess 这两个布尔开关——它们默认关闭关键能力,而错误提示几乎为零。调试进不了第三方包、抓不到子线程/协程里的断点,八成是它们没开。别只盯着断点红点,先看配置里这俩字段有没有显式设对。


















