~/VibeHandbook
免費 PDF

12 · 03

給 AI 喂正確的上下文

這是你大部分槓桿所在之處。當你報告一個 bug 時,請包含:

  • 逐字的錯誤資訊。 原樣複製——不要轉述。轉述一個錯誤,就像在電話裡描述一張照片:你會漏掉那個最關鍵的細節。
  • 堆疊跟蹤,尤其是頂部的幾行。
  • 相關程式碼——丟擲錯誤的函式,以及它呼叫的任何東西。
  • 你期望的結果與實際發生的結果對比。

下面是一個強力除錯提示的真實樣子:

我提交登錄檔單時報錯了。下面是完整的輸出:

TypeError: Cannot read properties of undefined (reading 'email')
    at validateUser (src/auth/validate.js:14:23)
    at handleSignup (src/routes/signup.js:31:10)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)

復現步驟:填好表單,點選 "Sign up"。
期望:一條 "Welcome" 訊息。
實際:頁面變成空白,上面這個錯誤出現在控制台裡。

這是 validate.js(第 14 行附近):
[貼上這個函式]

這是呼叫它的 handleSignup 函式:
[貼上這個函式]

什麼可能導致這個,以及在改動任何東西之前我該如何確認它?

注意最後一行。你是在請求一個假設和一個確認步驟,而不是立即修改。這能讓 AI 保持誠實。

知道如何閱讀你正在貼上的那段跟蹤,會很有幫助。堆疊跟蹤是一份按最新到最舊排列的呼叫歷史:最頂部那行是程式實際爆炸的地方,下面每一行都是呼叫了它上面那個函式的函式。所以在例子裡,validateUseremail 從某個 undefined 的東西上被讀取的地方,而 handleSignup 是呼叫 validateUser 的那一方。你自己程式碼下面的幀——比如 processTicksAndRejections——屬於語言執行時;通常你可以忽略它們。從上往下讀,直到碰到第一行指向你的檔案,那幾乎總是該開始檢視的地方。

把同一段跟蹤當作一摞呼叫來讀,順序就一目瞭然了。崩潰在最頂上,下面每一幀都是呼叫了它正上方那一幀的那一方:

   讀跟蹤                 =          呼叫棧
   (頂 = 最新)                       (誰呼叫了誰)

 ▲ validateUser  :14  ◀── 崩潰     ┌─────────────────┐ ▲ 從這裡
 │ handleSignup  :31               │ validateUser  14│ │ 開始
 │ processTicks...     (執行時,   ├─────────────────┤ │ 檢視
 │                      忽略)      │ handleSignup  31│ │
 │                                 ├─────────────────┤ │
 └─ 你的程式碼在前 ─────────────────▶│ processTicks... │─┘ (執行時)
                                   └─────────────────┘
   向下讀,直到第一行是你的檔案

想離線閱讀?

免費下載整本書的 PDF 或 EPUB。