第 2 章:断点、日志与最小复现¶
📋 本章概览¶
| 项目 | 内容 |
|---|---|
| 学习时长 | 35 分钟 |
| 核心概念 | 最小复现、断点、变量观察、日志 |
| 核心比喻 | 调试像把一团线拆成一条可追踪的线路 |
| 实践任务 | 把一个偶发问题缩小为最小案例 |
| 难度等级 | ★★☆☆☆ |
2.1 先让问题稳定重现¶
一个好 bug 报告应该能回答:
- 输入是什么
- 执行了哪条命令
- 实际结果是什么
- 期待结果是什么
- 是否每次都发生
如果问题无法稳定重现,先记录环境、版本和随机输入。
2.2 使用断点¶
def calculate_total(records):
total = 0
breakpoint()
for record in records:
total += record["amount"]
return total
运行到 breakpoint() 时,可以检查变量:
2.3 用日志记录事实¶
import logging
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(message)s")
logging.info("开始加载 %d 条记录", len(records))
日志应记录状态变化、关键输入和错误上下文,不要打印密码、Token 或个人敏感数据。
✏️ 课后练习¶
给记账本增加三个日志点:加载文件、保存文件、计算总额。让日志能帮助你判断程序卡在哪一步。
✅ 验证步骤¶
同一个输入连续运行三次,确认问题可重复;再删除无关代码,直到最小案例仍能触发问题,并用日志记录关键变量。
📝 本章总结¶
- 可重复是高质量调试的起点。
- 断点用于观察程序状态,日志用于留下可回放的事实。
- 最小复现能降低认知负荷和修复风险。
🔮 下一章预告¶
下一章会把“我认为应该如此”写成可以自动执行的测试。