必须装Python扩展、选对解释器、配好launch.json;最小配置只需module、args、console三字段;断点失效多因文件未执行、__name__判断失败、热重载干扰或路径含中文。

VS Code 调试 Python 前必须确认的三件事
VS Code 本身不自带 Python 调试能力,必须装对扩展、选对解释器、配好 launch.json,缺一不可。很多人卡在“点调试没反应”,其实根本没进调试流程。
- 装好 Python 扩展(Microsoft 官方),不是 Pylance 或其他辅助插件 —— 后者不提供调试器
- 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(Mac)打开命令面板,运行Python: Select Interpreter,选一个真实存在的 Python 解释器路径(比如/usr/bin/python3或C:\Python39\python.exe),不能是 conda 环境但没激活、或虚拟环境路径写错 - 项目根目录下要有
.vscode/launch.json,且其中configurations至少有一项,type必须是python,request是launch或attach
最简可用的 launch.json 配置怎么写
不用抄网上几十行的模板。一个能跑起来的最小配置,只关注三个字段:module、args、console。其余如 env、justMyCode 按需加。
- 调试脚本文件(如
main.py):用module字段更稳,避免路径问题{ "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "module": "main", "console": "integratedTerminal" } ] } - 如果脚本依赖命令行参数,在
args里写数组:"args": ["--verbose", "input.txt"] -
console推荐integratedTerminal;设成externalTerminal在 Windows 上常因权限或路径失败
断点不生效?先看这四个常见硬伤
VS Code 显示红点(断点已设),但运行后直接跳过,大概率不是 VS Code 问题,而是 Python 运行时根本没加载到那行。
- 当前文件没被真正执行:比如你在
utils.py打断点,但主程序是python app.py,且app.py没 importutils—— 断点在未加载模块里无效 - 用了
if __name__ == "__main__":但没走进去:检查是否误点了「调试 Python 文件」而不是「调试当前启动配置」,前者会忽略launch.json的module设置 - 代码被优化或重载:某些框架(如 Flask 开发模式、Jupyter 插件)会动态 reload,导致断点绑定失效;关掉热重载再试
- 路径含中文或空格:Windows 下尤其敏感;把项目移到
C:\dev\myproj这类纯英文无空格路径再试
调试多文件/包结构时 module 和 program 怎么选
区别不在“能不能用”,而在“Python 怎么导入和执行”。用错会导致 ModuleNotFoundError 或断点全失效。
立即学习“Python免费学习笔记(深入)”;
-
program:指定一个 .py 文件路径,等价于命令行python xxx.py;适合扁平脚本,但跨目录 import 容易失败(因为sys.path[0]是文件所在目录,不是项目根) -
module:指定模块名(不含.py),如"myproject.cli",等价于python -m myproject.cli;要求项目根在PYTHONPATH或已安装为可导入包;断点在包内任意文件都有效 - 推荐统一用
module:在launch.json里写"module": "myproject.main",并在项目根下确保有myproject/__init__.py;这样路径稳定,也符合生产部署习惯
debugpy,它会在 Python 进程里注入一个 socket server。所以任何阻塞 stdin、接管信号(如 os.kill())、或提前 exit 的逻辑,都可能让调试会话静默退出——这不是配置问题,是程序行为和调试机制的天然冲突。










