~/VibeHandbook
免费 PDF

12 · 02

一份调试清单

按顺序逐项完成这些步骤。直接跳到"修好它"正是让 AI 兜圈子的原因。

  1. 可靠地复现它。 找到每次都能让 bug 出现的确切步骤。一个你无法复现的 bug,是你无法确认自己已经修好的 bug——你将永远只是在猜测它是否消失了。如果它是间歇性出现的,去捕猎那个让它切换的变量:某个特定输入、登录还是登出的状态、缓慢的网络。
  2. 阅读真正的错误信息。 不要略读。错误信息和堆栈跟踪的顶部通常会指出出问题的文件和行号。初学者常常因为某句话看起来吓人,就略过了屏幕上最有用的那句。
  3. 收集上下文。 收集错误文本、堆栈跟踪、相关代码,以及一句话描述你期望的结果。
  4. 把完整的画面交给 AI。 把以上所有内容粘贴在一条消息里。让它形成一个假设。
  5. 形成假设,而不是修复方案。 在"修好这个"之前先问"什么可能导致这个?"。基于错误理论的错误修复只会浪费时间——有时还会在第一个 bug 之上叠加一个第二个 bug。
  6. 添加日志来测试假设。 在修改代码之前,先确认代码实际在做什么。
  7. 二分查找问题。 通过反复将可疑区域对半切分,缩小故障发生的位置
  8. 修复根本原因,而非表象。 确保修复针对的是它为什么出问题,而不仅仅是可见的故障。
  9. 验证修复并检查回归。 重新运行复现步骤。然后确保附近的功能仍然正常工作——所谓回归,就是一个修复悄悄弄坏了原本好好的东西,就像补好一处漏水,旁边的管子却爆了。

这份清单其实就是一个你不断绕行、直到 bug 消失的循环。每个方框都把证据交给下一个,而一次失败的验证只会带着你学到的东西重新绕一圈:

   ┌──────────────┐
   │     复现     │  让它每次都发生
   └──────┬───────┘
          ▼
   ┌──────────────┐
   │  读错误 +    │  它到底在说什么?
   │     收集     │  收集 trace+代码+上下文
   └──────┬───────┘
          ▼
   ┌──────────────┐
   │     假设     │  "什么会导致这个?"
   └──────┬───────┘
          ▼
   ┌──────────────┐
   │  用日志      │  加条日志,拿到证据
   │     确认     │
   └──────┬───────┘
      错误│  正确
   ┌──────┘ 猜测    ▼
   │            ┌──────────────┐
   │ (新        │  修根本      │  而非表象
   │  理论)     │     原因     │
   │            └──────┬───────┘
   │                   ▼
   │            ┌──────────────┐    失败 / 回归
   └────────────┤     验证     │──────────┐
                │ + 回归检查   │          │
                └──────┬───────┘          │
                       │ 通过             │
                       ▼          ◀───────┘
                    ✔ 完成      (绕回去再来)

这个顺序并非随意。每一步都产生下一步所需要的证据。复现给你提供可读的东西;阅读给你提供可收集的上下文;上下文给 AI 提供可做假设的素材。跳过一步,你就是在给下一步喂一个窟窿。

想离线阅读?

免费下载整本书的 PDF 或 EPUB。