跳转至

第 2 章:断点、日志与最小复现

📋 本章概览

项目 内容
学习时长 35 分钟
核心概念 最小复现、断点、变量观察、日志
核心比喻 调试像把一团线拆成一条可追踪的线路
实践任务 把一个偶发问题缩小为最小案例
难度等级 ★★☆☆☆

2.1 先让问题稳定重现

一个好 bug 报告应该能回答:

  • 输入是什么
  • 执行了哪条命令
  • 实际结果是什么
  • 期待结果是什么
  • 是否每次都发生

如果问题无法稳定重现,先记录环境、版本和随机输入。

2.2 使用断点

def calculate_total(records):
    total = 0
    breakpoint()
    for record in records:
        total += record["amount"]
    return total

运行到 breakpoint() 时,可以检查变量:

p records
p total
n
c

2.3 用日志记录事实

import logging

logging.basicConfig(level=logging.INFO, format="%(levelname)s %(message)s")
logging.info("开始加载 %d 条记录", len(records))

日志应记录状态变化、关键输入和错误上下文,不要打印密码、Token 或个人敏感数据。

✏️ 课后练习

给记账本增加三个日志点:加载文件、保存文件、计算总额。让日志能帮助你判断程序卡在哪一步。

✅ 验证步骤

同一个输入连续运行三次,确认问题可重复;再删除无关代码,直到最小案例仍能触发问题,并用日志记录关键变量。

📝 本章总结

  • 可重复是高质量调试的起点。
  • 断点用于观察程序状态,日志用于留下可回放的事实。
  • 最小复现能降低认知负荷和修复风险。

🔮 下一章预告

下一章会把“我认为应该如此”写成可以自动执行的测试。