根本原因與表象
除錯中最誘人的陷阱,就是那種讓錯誤消失卻沒修復原因的補丁。如果 user 是 undefined,你用 if (user) { ... } 來"修復"它,錯誤是停止了——但現在註冊會悄無聲息地什麼都不做,這更糟糕:一次響亮的崩潰至少告訴了你哪裡出了錯,而現在什麼都不告訴你了。真正的問題是為什麼 user 在這裡是 undefined? 也許資料庫查詢失敗了。也許某個欄位被重新命名了。也許上游缺了一個 await。
當 AI 提出一個修復方案時,問它:
- "這是在修復原因,還是在掩蓋表象?"
- "這個值出錯的最初原因是什麼?"
- "同樣的根本原因會不會破壞其他東西?"
修復根本原因通常會讓程式碼更簡單或更清晰。修補表象通常會新增一個守衛、一個吞掉錯誤的 try/catch,或者一個掩蓋真正問題的預設值。對第二種要保持警惕。有一個值得學會的跡象:如果一個修復新增的程式碼,其唯一職責是防止崩潰,而不是做正確的事,那你很可能是在修補表象。真正的修復傾向於把那個不可能的狀態徹底移除,而不只是熬過它。