一份除錯清單
按順序逐項完成這些步驟。直接跳到"修好它"正是讓 AI 兜圈子的原因。
- 可靠地復現它。 找到每次都能讓 bug 出現的確切步驟。一個你無法復現的 bug,是你無法確認自己已經修好的 bug——你將永遠只是在猜測它是否消失了。如果它是間歇性出現的,去捕獵那個讓它切換的變數:某個特定輸入、登入還是登出的狀態、緩慢的網路。
- 閱讀真正的錯誤資訊。 不要略讀。錯誤資訊和堆疊跟蹤的頂部通常會指出出問題的檔案和行號。初學者常常因為某句話看起來嚇人,就略過了螢幕上最有用的那句。
- 收集上下文。 收集錯誤文本、堆疊跟蹤、相關程式碼,以及一句話描述你期望的結果。
- 把完整的畫面交給 AI。 把以上所有內容貼上在一條訊息裡。讓它形成一個假設。
- 形成假設,而不是修復方案。 在"修好這個"之前先問"什麼可能導致這個?"。基於錯誤理論的錯誤修復只會浪費時間——有時還會在第一個 bug 之上疊加一個第二個 bug。
- 新增日誌來測試假設。 在修改程式碼之前,先確認程式碼實際在做什麼。
- 二分查詢問題。 通過反覆將可疑區域對半切分,縮小故障發生的位置。
- 修復根本原因,而非表象。 確保修復針對的是它為什麼出問題,而不僅僅是可見的故障。
- 驗證修復並檢查回歸。 重新運行復現步驟。然後確保附近的功能仍然正常工作——所謂迴歸,就是一個修復悄悄弄壞了原本好好的東西,就像補好一處漏水,旁邊的管子卻爆了。
這份清單其實就是一個你不斷繞行、直到 bug 消失的迴圈。每個方框都把證據交給下一個,而一次失敗的驗證只會帶著你學到的東西重新繞一圈:
┌──────────────┐
│ 復現 │ 讓它每次都發生
└──────┬───────┘
▼
┌──────────────┐
│ 讀錯誤 + │ 它到底在說什麼?
│ 收集 │ 收集 trace+程式碼+上下文
└──────┬───────┘
▼
┌──────────────┐
│ 假設 │ "什麼會導致這個?"
└──────┬───────┘
▼
┌──────────────┐
│ 用日誌 │ 加條日誌,拿到證據
│ 確認 │
└──────┬───────┘
錯誤│ 正確
┌──────┘ 猜測 ▼
│ ┌──────────────┐
│ (新 │ 修根本 │ 而非表象
│ 理論) │ 原因 │
│ └──────┬───────┘
│ ▼
│ ┌──────────────┐ 失敗 / 迴歸
└────────────┤ 驗證 │──────────┐
│ + 迴歸檢查 │ │
└──────┬───────┘ │
│ 通過 │
▼ ◀───────┘
✔ 完成 (繞回去再來)
這個順序並非隨意。每一步都產生下一步所需要的證據。復現給你提供可讀的東西;閱讀給你提供可收集的上下文;上下文給 AI 提供可做假設的素材。跳過一步,你就是在給下一步喂一個窟窿。