“我加了 8 个
—— 某位刚被 SRE 叫去喝茶的开发者
你是不是也这样调试代码?
print("subtotal:", subtotal)
print("discount:", discount)
print("total before return:", total)
print 调试简单、直接、可靠——但效率低、易遗漏、污染代码。
尤其当你需要:
- 查看循环中每一步的变量
- 跟踪函数调用栈
- 修改临时值测试逻辑
这时候,是时候升级你的武器库了:VS Code 内置调试器,免费、强大、零侵入!
今天,我们就用一个真实 Bug,手把手教你从 “print 新手” 进阶到 “调试高手”。
🐛 场景重现:一个“越打折越贵”的订单系统
假设你写了这样一个 Python 函数:
def calc_total(orders, discount):
subtotal = 0
for o in orders:
subtotal += o.price * o.qty
# ❌ 错误:用了 + 而不是 -
total = int(subtotal * (1 + discount)) # 应该是 (1 - discount)!
return total
预期:打 9 折(discount=0.1),总金额应为 1431
实际输出:1749 —— 居然涨价了?!
用 print 调试?可以,但麻烦。
用 VS Code 调试器?5 秒定位问题。
🛠️ 第一步:安装 Python 扩展(只需一次)
- 打开 VS Code
- 点击左侧 Extensions(扩展) 图标(或按
Ctrl+Shift+X) - 搜索 “Python”,安装由 Microsoft 官方发布的插件

✅ 安装后,VS Code 自动支持断点、变量查看、单步执行等调试功能。
配置解释器
📍 第二步:设置断点(点击一下就行)
在你想“暂停检查”的代码行左侧 点击空白处,会出现一个红点 —— 这就是断点(Breakpoint)。
我们在这两行设断点:
subtotal += o.price * o.qtytotal = int(subtotal * (1 + discount))

💡 小技巧:按住
Ctrl(Windows/Linux)或Cmd(Mac)可快速添加/删除断点。
▶️ 第三步:启动调试器
- 点击左侧 Run and Debug 图标(虫子图标 🐞)
- 点击 “Run and Debug” 按钮
- 首次使用会提示选择环境,选 “Python File”

程序会在第一个断点处自动暂停!
🔍 第四步:查看变量 & 单步执行
当程序暂停时,左侧会显示 Variables(变量)面板:
orders: 当前订单列表subtotal: 循环累加后的金额(1590)discount: 0.1
继续点击 Step Over(F10),执行下一行:
total = int(subtotal * (1 + discount))
计算过程一目了然:
1590 * (1 + 0.1) = 1590 * 1.1 = 1749
🎯 Bug 根源暴露:应该是
(1 - discount),不是(1 + discount)!

条件断点
右击断点,选择Expression,填写表达式


查看表达式的值
vscode 提供了一个watch功能,可以方便查看一个表达式的值


✅ 第五步:修复并验证
修改代码:
# 修复:减去折扣
total = int(subtotal * (1 - discount))
重新运行,输出:
TOTAL: 1431
完美!
🧠 为什么调试器比 print 更强?
| 对比项 | print 调试 |
VS Code 调试器 |
|---|---|---|
| 代码侵入 | 需要写/删代码 | 零修改 |
| 变量查看 | 只能看指定值 | 所有变量实时可见 |
| 控制流 | 无法暂停 | 可暂停、单步、跳入函数 |
| 条件调试 | 难实现 | 支持 条件断点 |
| 生产安全 | 容易漏删 | 完全无残留 |
就像从用手电筒找钥匙,升级到用热成像仪——效率不是一个量级。
🎯 总结:调试器不是“高级功能”,而是“基础技能”
print 调试适合 5 行脚本,但现代开发需要更高效的工具。
VS Code 调试器:
- 免费、内置、开箱即用
- 支持 Python、Go、JavaScript、Rust 等几乎所有语言
- 让你 看得清、控得住、改得快
下次遇到诡异 Bug,别再狂加 print 了——
点个断点,让代码自己说话。
Happy Debugging! 🐞✨