90%的python调试失败源于环境配置错误:vscode需安装并启用ms-python.python扩展,正确配置launch.json中program/module路径,手动选择解释器,关闭web重载,避免断点设在无效位置,并注意终端类型影响输出捕获。

F5没反应、断点变空心、程序跑完不暂停——90%的情况不是代码问题,而是调试环境没搭对。
Python扩展没启用,F5就永远是摆设
VSCode本身不带Python调试能力,ms-python.python是唯一能触发单步执行的扩展;ms-python.pylance只管补全和类型检查,装了它也按不动F5。
- 打开扩展面板(
Ctrl+Shift+X),搜“Python”,认准发布者是 Microsoft、名称含“Python”、状态为“已启用” - 装完必须重启VSCode,否则调试器注册不上,底部状态栏也不会显示Python版本号
- 底部状态栏点击Python版本号,手动选对解释器——尤其用
venv或conda时,选错就等于调试另一个世界
launch.json里program或module写错,断点就永远“未命中”
VSCode靠launch.json决定启动哪段代码。写错路径或模式,它会默默运行一个和你编辑的文件完全无关的进程。
安全 Python 代码沙箱:在隔离的沙箱中执行任意 Python 代码,预装 requests、NumPy、pandas 库。返回 stdout、stderr。
- 用
program模式(最常用):"program": "src/main.py"—— 必须是相对${workspaceFolder}的路径,不能加./,也不能写绝对路径 - 用
module模式(如python -m http.server):"module": "http.server"—— 填模块名,不是http.server.py,也不是路径 - Web项目(Flask/FastAPI)务必关重载:
debug=False, use_reloader=False或uvicorn.run(..., reload=False),否则调试器attach不到子进程
断点设在def/class/空行上,VSCode会自动“挪”,但挪得不准
Python调试器只在可执行语句生效。装饰器后面那行def、多行字典开头、生成器表达式首行,都容易让断点漂移。
- 优先把断点设在有副作用的语句上:
x = 1、print()、return result、yield item - 避免在
@decorator正下方那行def foo():设断点 → 实际停在函数体第一行,容易误判入口逻辑 - 鼠标悬停断点红点:提示“断点未命中”就查
launch.json;提示“已禁用”就右键确认是否误点了禁用图标
单步执行时F10/F11停在哪,取决于当前帧的可执行位置
单步跳过(F10)和单步进入(F11)的行为,由当前行是否调用函数、以及该函数是否在当前工作区中定义共同决定。
-
F10遇到print()、len()等内置函数,直接跳到下一行;遇到自己写的process_data(),仍停在调用行 -
F11才能进到process_data()函数体内部——前提是它的源码在当前工作区或PYTHONPATH里可定位 - 如果进不去,检查函数定义文件是否被正确加载:在调试控制台输入
import inspect; print(inspect.getfile(process_data))
最常被忽略的是:断点“看起来设对了”,但launch.json里console设成externalTerminal时,VSCode可能无法捕获子进程输出,导致你以为没停,其实已经停了——切回integratedTerminal再试一次。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










