VSCode Python调试需满足三条件:Python扩展启用、解释器路径正确、launch.json配置合法;常见问题包括扩展未启用、解释器未选择或路径错误、module/program配置不当、断点设在不可执行行、justMyCode为false、路径含中文空格、框架重载干扰等。

VSCode 不会自动配置 Python 调试环境,装完扩展只是第一步;真正能调试的前提是:Python 扩展已启用、解释器路径选对、launch.json 存在且配置合法 —— 缺一不可。
为什么按 F5 没反应或提示“没有配置启动项”
这不是 VSCode 坏了,而是调试链路根本没建立起来。常见原因有三个:
- 没装
ms-python.python扩展(只装了ms-python.pylance不行,它不提供调试器) - 扩展装了但没启用,或装完没重启 VSCode(必须重启)
- 右下角状态栏没显示 Python 解释器路径,说明
Python: Select Interpreter没执行过,或者选的路径根本不存在(比如 conda 环境名写错、venv 被删了)
验证方式:按 Ctrl+Shift+P → 输入 Python: Select Interpreter → 看列表里有没有带真实路径的选项(如 /home/user/venv/bin/python 或 C:\Users\me\env\Scripts\python.exe)。没有就先解决解释器问题。
launch.json 里 module 和 program 到底怎么填
填错会导致 ModuleNotFoundError、断点不命中、甚至脚本根本没运行。关键区别不在“能不能跑”,而在“Python 怎么加载代码”:
立即学习“Python免费学习笔记(深入)”;
- 用
"module": "http.server":等价于终端执行python -m http.server,此时__file__不可用,工作目录是${workspaceFolder},模块名必须可被 Python 导入(不能带.py后缀) - 用
"program": "src/main.py":等价于python src/main.py,工作目录默认是该文件所在目录,__file__可用,但program必须是相对${workspaceFolder}的路径(不能写./src/main.py或绝对路径) - 调试单个脚本且依赖同目录下
utils.py?优先用program+"cwd": "${fileDirname}" - 调试包结构(如
myproject/cli.py作为入口)?用module更稳,前提是myproject在PYTHONPATH或已安装为可导入包
断点设了但程序直接跳过,怎么办
红点变空心、悬停提示“断点未命中”,大概率不是 VSCode 的锅,而是代码根本没走到那里:
- 当前文件没被 import 或执行:比如你在
utils.py设断点,但主程序是python app.py,而app.py里根本没import utils - 断点设在不可执行行:函数定义首行(
def foo():)、类定义行(class A:)、装饰器行(@decorator)都会被跳过;应设在函数体第一行、变量赋值、print()等明确语句上 -
justMyCode被设成false:这会让调试器尝试进入标准库,一旦遇到 C 扩展(如json、os)或没源码的包,断点就失效,还拖慢速度;保持默认true即可 - 路径含中文或空格:Windows 下尤其敏感,把项目移到
C:\dev\myproj这类纯英文无空格路径再试
调试 Flask/Django 时卡在启动阶段
这类框架默认开启重载(reloader)和多进程,VSCode 调试器 attach 不上子进程,结果就是 app.run() 之后断点全失效,或者反复重启看不到暂停:
- Flask:启动前加
debug=False,即app.run(debug=False);或者在launch.json的args里加--no-reload - Django:用
"module": "django.core.management"+"args": ["runserver", "--noreload"] - 别信“自动 attach 子进程”这种说法:除非显式配置
"subProcess": true且 debugpy 版本 ≥ 1.6.0,否则默认不捕获子进程断点
最常被忽略的是:你改了代码、点了重启,但旧进程还在后台占着端口,新调试会话连不上 —— 务必关掉所有残留的 python 进程再试。


















