51. 把錯誤原文原封不動貼給 AI
我的程式出現了錯誤,以下是完整的錯誤訊息,我原封不動貼給你: 〔把整段錯誤訊息貼上,不要只貼一句,前後都要〕 我當時正在做的事情是:〔例如:點下「送出」按鈕的時候〕。請幫我看這個錯誤是什麼意思、可能是什麼原因造成的、以及該怎麼修。
別只複製一句紅字,也別自己轉述。錯誤訊息像病歷,完整貼上最有用。很多關鍵線索都藏在你覺得看起來不重要的那幾行裡。
《零基礎學 Vibe Coding》讀者專區
錯誤訊息是你的朋友,修 Bug 的正確對話方式
把方括號〔〕裡的內容換成你自己的情況,整段複製貼給 AI 就能用。
我的程式出現了錯誤,以下是完整的錯誤訊息,我原封不動貼給你: 〔把整段錯誤訊息貼上,不要只貼一句,前後都要〕 我當時正在做的事情是:〔例如:點下「送出」按鈕的時候〕。請幫我看這個錯誤是什麼意思、可能是什麼原因造成的、以及該怎麼修。
別只複製一句紅字,也別自己轉述。錯誤訊息像病歷,完整貼上最有用。很多關鍵線索都藏在你覺得看起來不重要的那幾行裡。
我遇到一個問題,程式沒有跳錯誤,但行為不對。 我預期:〔點下按鈕後,應該跳出成功訊息〕。 實際發生:〔點下按鈕後,什麼都沒發生〕。 重現步驟:〔1. 打開頁面 2. 填好表單 3. 點送出〕。 請幫我分析為什麼會這樣,該從哪裡開始查。
「預期 vs 實際 vs 重現步驟」是求救的黃金公式。沒報錯的問題最難講,用這三格把它框起來,AI 就抓得到方向。
我這個功能〔描述功能〕有時候會出錯、有時候正常,我抓不到規律。請幫我想想:在什麼情況下最可能出這個問題?請列出幾個可能觸發問題的情境,並告訴我每一個該怎麼實際操作去測試,好讓我穩定地重現這個 bug,才能對症下藥。
抓不到規律的 bug 最惱人。與其瞎試,不如請 AI 幫你列出可疑情境,然後逐一測試。只要能穩定重現,問題就解決一半了。
我這個〔功能或流程〕出錯了,但它牽涉的環節很多,我不知道問題出在哪一段。請教我用二分法縮小範圍:怎麼把整個流程切成前後兩半、分別怎麼確認哪一半是好的、哪一半有問題,然後再把有問題的那半繼續切。請一步一步帶我找出真正出錯的那個點。
二分法就像玩猜數字:每次砍一半,很快就逼近答案。與其從頭到尾一行行看,不如先確認問題在前半還後半,效率高得多。
我剛才為了〔目的,例如:修正報名表單的驗證〕改了〔改動內容〕,結果原本正常的〔另一個功能,例如:登入功能〕反而壞了。我改動前它是好的。請幫我分析:我的改動為什麼會連累到這個看似無關的功能?它們之間可能有什麼隱藏的關聯?該怎麼修才不會又弄壞別的地方。
這種按下葫蘆浮起瓢的狀況,叫回歸(regression)。關鍵線索是改之前是好的,一定要講給 AI 聽,它才會往你剛才的改動這個方向查。
你上一步說已經修好了,但我實際測試,問題完全沒有改善,狀況跟之前一模一樣:〔描述現在的實際情形,或貼上一樣的錯誤〕。請不要再假設上次的修法是對的。我們重新開始:請先跟我確認你認為問題的根本原因是什麼,我們對齊了原因,再決定怎麼修。
AI 會有過度自信的時候。這時別讓它在錯的方向上繼續修正,直接喊停、要求它重講一次你認為的根本原因,逼它回到診斷。
這個問題我們已經用〔目前的方法〕試了好幾次都沒成功:〔簡述試過什麼、結果如何〕。我不想再往同一個方向鑽了。請你先退一步,用全新的角度重新思考這個問題,提出 2 到 3 個跟剛才完全不同的解法或思路讓我選,並說明各自的優缺點。
一個方法試三次沒好,就別再試第四次了。明確告訴 AI 換個完全不同的方向,並附上你試過什麼,避免它又繞回原路。
我看到這個訊息完全看不懂:〔貼上錯誤訊息或那段看不懂的術語〕。請你當我的翻譯,用講給一個完全不懂程式的朋友聽的方式,白話解釋這句話到底在講什麼、它在抱怨什麼、大方向上通常跟什麼有關。我先求聽懂它在說什麼,還不急著修。
看懂錯誤訊息在講什麼,你就從怕它變成懂它。多用這招當翻譯機,久而久之你會發現常見的錯誤就那幾種。
我的〔某個功能〕遇到意外狀況(例如網路斷線、使用者輸入怪東西、外部服務沒回應)時就整個當掉。請幫我加上防護和錯誤處理:讓程式在出狀況時不要崩潰,而是優雅地擋下來、給使用者一句友善的提示、必要時記錄下來方便我查。請告訴我你補了哪些防護、還有哪些狀況值得防。
好的程式不是不會出錯,而是出錯時不會爆炸。主動請 AI 想還有哪些狀況值得提防,它常能點出你沒想到的意外。
我遇到這個問題:〔描述問題,附上預期 vs 實際〕。我不想亂猜亂試。請先幫我列出所有可能造成這個問題的原因,從最常見、最可能的排到最少見的。然後針對每一個原因,告訴我該怎麼快速確認是不是它?我們一個一個排除,找到真正的兇手。
這是專業工程師的除錯心法:先列清單、依可能性排序、逐一驗證。比起靈光一閃亂試,這種系統性排查的方式,慢慢來反而最快。AI 幫你寫出來的程式,你不見得看得懂,這很正常。但如果你連它做了什麼都不知道,就等於把方向盤完全交出去,出事只能乾瞪眼。這一類的提示詞不是要你變成工程師,而是讓 AI 一邊做、一邊當你的家教,把每一段程式翻成你聽得懂的話,你才有底氣做決定。
找不到一模一樣的沒關係,抓錯誤訊息的關鍵字對大方向就行。 完整清單與萬能救援句在卡關 FAQ。
command not found: node 或 command not found: npm我在〔Mac/Windows〕上輸入 `node -v`,跳出 `command not found: node`。我是零基礎,請一步一步帶我確認 Node.js 有沒有裝、要怎麼裝,裝完要不要重開終端機。每一步請告訴我要在哪裡打字、打什麼。
裝完任何新工具,先把終端機完全關掉再重開一次,很多「找不到指令」其實只是舊視窗還沒更新。
command not found: python 或 python: command not found我輸入 `python` 出現 `command not found`,但我記得好像有裝過。請幫我判斷是不是要改打 `python3`,還有怎麼確認到底裝了沒。我用的是〔Mac/Windows〕。
先試著把 `python` 改成 `python3` 再跑一次,這是最常見的解法。
The engine "node" is incompatible 或 requires Node version >=18我啟動專案時出現 `requires Node version >=18`,但我不知道我現在是哪一版、也不知道怎麼換。請先教我怎麼查目前版本,再一步步帶我升級或切換到它要的版本。我用〔Mac/Windows〕。
把整段版本需求連同你 `node -v` 查到的數字一起貼給 AI,它就能直接告訴你差多少、怎麼補。
permission denied 或 EACCES: permission denied我在做〔說明你剛剛在做什麼,例如 npm 全域安裝〕時出現 `permission denied`。請先告訴我這通常代表什麼、有沒有「不用硬加權限」的安全做法,再帶我操作。我不希望亂用 sudo 把系統弄壞,請提醒我風險。
看到權限錯誤,先別急著在指令前面加 `sudo`。很多情況有更安全的作法,先問 AI 有沒有替代方案。
'xxx' is not recognized as an internal or external command(Windows)我在 Windows 輸入 `〔你打的指令〕`,出現 `is not recognized as an internal or external command`。請一步步帶我確認這個程式有沒有裝、怎麼把它加進 PATH,最後要不要重開機。
Windows 改完 PATH 之後,記得把命令提示字元整個關掉重開,不然新設定不會生效。
command not found(明明剛裝好卻找不到)我剛用〔你的安裝方式,例如 npm install -g、brew〕裝好 `〔工具名〕`,但一跑就說 `command not found`。請幫我判斷是 PATH 沒設好、還是要重開終端機、還是我呼叫的方式錯了,一步步帶我排查。
「裝好卻找不到」十之八九是 PATH 或沒重開視窗的問題,先關掉終端機重開再試一次。寫程式很少從零開始,你會用到很多別人寫好的積木(套件,Package)。這一類錯誤通常在說:「你要用的積木,我手上沒有,或裝壞了。」
Cannot find module 'X' 或 Module not found: Can't resolve 'X'我執行專案時出現 `Cannot find module ``'``〔它說找不到的名字〕``'`。請先判斷這是「還沒安裝」還是拼錯名字?如果要安裝,直接給我完整的安裝指令,並告訴我要在哪個資料夾裡打。
把 `'X'` 裡那個確切名字複製給 AI,它常常一眼就看出是少裝了、還是打錯字。
npm ERR!(一大片紅字)我跑 `npm`` install` 失敗,噴出一大片 `npm`` ERR!`。我把整段完整貼給你,請幫我找出「真正的關鍵那一行」是什麼、代表什麼問題,再給我對應的解法。訊息如下:〔貼上整段紅字,不要只貼第一行〕
`npm`` ERR!` 會有很多行,最有用的線索常在中後段。整段貼、別自己挑,讓 AI 幫你找重點。
unable to resolve dependency tree 或 peer dependency conflict我安裝套件時出現 `peer dependency conflict`(完整訊息如下)。請先幫我看懂是「哪兩個套件、為了哪個版本」在衝突,再告訴我最安全的解法是什麼,並提醒我硬繞過去會不會有後遺症。訊息:〔貼上整段〕
網路上常叫人加 `--force` 或 `--legacy-peer-deps` 硬裝,但那是繞過問題不是解決。先問 AI 有沒有更乾淨的作法。
lockfile 衝突(package-lock.json 出現 <<<<<<< 標記)我的 `package-``lock.json`(或 `pnpm-lock.yaml`)出現 `<<<<<<<` 這種衝突標記,安裝就失敗。我是零基礎,這個檔案我看不懂也不敢亂改。請告訴我最安全的處理方式,最好是能直接重新產生一份乾淨的,一步步帶我做。
lockfile 是電腦自動產生的檔案,通常最省事的解法是刪掉它重新安裝,讓工具重生一份,不用自己去改箭頭。
裝完套件後指令仍 command not found我用 `npm`` install` 裝了 `〔套件名〕`,安裝顯示成功,但我直接打它的指令卻 `command not found`。請幫我判斷它是裝在本地還是全域,還有正確的呼叫方式應該是什麼(例如是不是要用 npx 或 package.json 裡的 script)。
專案內裝的工具,通常要用 `npx`` ``指令名` 或寫進 package.json 的 scripts 來跑,而不是直接打指令名。這一類是程式碼本身寫法出了小差錯,通常是漏字、拼錯或括號沒打完整。好消息是它幾乎都會告訴你出錯的檔案跟行數,AI 修起來很快。
SyntaxError: Unexpected token我存檔後出現 `SyntaxError``: Unexpected token`,它指到〔檔名與行號,紅字裡會寫〕。請幫我看這附近是不是少了或多了標點、括號。我把那一段程式碼貼給你:〔貼上錯誤指到的那幾行〕
語法錯誤最常見的元兇,是少一個括號或引號。把它指的那一行連同上下各兩三行一起貼給 AI,通常一秒就抓到。
TypeError: Cannot read properties of undefined (reading 'xxx')我遇到 `TypeError``: Cannot read properties of undefined (reading ``'``〔它說的那個名字〕``')`。這在我〔說明你剛做的動作,例如按下送出、開啟頁面〕時發生。請幫我判斷是不是某個資料還沒準備好就被用了,並教我怎麼加保護讓它不要一空就爆掉。相關程式碼:〔貼上〕
這個錯誤幾乎都跟時機有關:東西還沒到,你就先去拿了。跟 AI 說清楚「我點了什麼才出問題的」,它會更快定位。
TypeError: X is not a function我呼叫 `〔那個名字〕` 時出現 `is not a function`。請幫我確認這個名字有沒有拼錯、是不是引入的方式不對、還是它在新版被改名了。我用的套件是〔套件名與版本,若知道〕,程式碼片段:〔貼上〕
如果是最近升級過套件才壞的,跟 AI 講一聲「我剛更新過版本」,這常常就是主因。
ReferenceError: X is not defined我遇到 `ReferenceError``: ``〔那個名字〕`` is not defined`。請幫我判斷是我把名字打錯了、還是漏了宣告、還是少 import 了某個東西。這是相關程式碼:〔貼上〕
`is not defined`(沒定義)跟前面的 `is not a function`(不是動作)不一樣:前者是「這個名字根本不存在」,後者是「名字存在但用錯方式」。跟 AI 講清楚看到的是哪一個。
SyntaxError: Unexpected end of input我出現 `Unexpected end of input`,它指到檔案最後。我猜是有括號或引號沒關好。請幫我檢查這個檔案的括號有沒有成對,把該補的補上。整個檔案內容如下:〔貼上整個檔案〕
這類錯誤把整個檔案貼給 AI 最有效,因為問題常常不在它指的那一行,而是前面某處少關了一個括號。程式跑得起來,但一操作就出狀況,或畫面怪怪的:畫面空白、一直轉圈或連不到伺服器。這一類跟執行當下和連線有關,也是設計網頁最常撞到的一區。
EADDRINUSE: address already in use :::3000我啟動專案時出現 `EADDRINUSE: address already in use ``:::``〔那個數字〕`。請告訴我兩條路:一是怎麼把占用這個 port 的舊程式關掉,二是怎麼改用另一個 port 啟動。我用〔Mac/Windows〕,一步步帶我。
最快的解法通常是把之前那個沒關的終端機視窗找出來關掉,或直接換一個 port 號啟動。
blocked by CORS policy我的網頁抓資料時,Console 出現 `blocked by CORS policy`。請用白話跟我解釋 CORS 是什麼,然後幫我判斷該改的是前端呼叫的方式,還是後端要開放權限,並分別告訴我怎麼做。我的前端跑在〔網址〕,要打的 API 在〔網址〕。
CORS 幾乎都要在「被呼叫的那一端(後端/API)」設定允許,光改前端通常沒用。把兩邊網址都告訴 AI,它才好判斷。
Failed to fetch 或 fetch failed我抓資料時出現 `Failed to fetch`。請幫我一項一項排查:後端有沒有在跑、網址對不對、是不是網路或 CORS 問題。告訴我每一項要怎麼自己確認。我要打的網址是〔網址〕。
先確認「你要連的那個後端或服務,現在到底有沒有在運作」。很多 `Failed to fetch` 只是因為後端沒開。
畫面一片空白(沒有任何紅字)我的網頁打開是一片空白,畫面上沒有任何錯誤。請教我怎麼打開瀏覽器的開發者工具、切到 Console 分頁去看有沒有紅字,我把看到的紅字貼給你。如果 Console 是空的,也請告訴我下一步該看哪裡。
畫面空白不等於沒錯,只是錯誤藏起來了。按下鍵盤的 F12 打開開發者工具、看 Console 分頁,紅字通常就在那裡等你。
畫面一直轉圈、無限載入我的頁面一直轉圈、載不出來也不報錯。請幫我判斷是不是「資料請求失敗了但程式沒處理」,並教我怎麼加上「載入失敗就顯示提示」而不是一直轉。同時教我怎麼在開發者工具的 Network 分頁看那個請求是成功還失敗。相關程式碼:〔貼上〕
開發者工具的 Network(網路)分頁能看到每個請求的狀態,紅色的那筆通常就是卡住的元兇。
500 Internal Server Error我呼叫後端時回 `500 Internal Server Error`。我知道這代表伺服器端出錯。請教我去哪裡看後端的錯誤紀錄(log),找出真正的錯誤那一行,我再貼給你。我的後端是〔平臺或框架名,若知道〕。
500 只是「表面代碼」,真正的原因寫在伺服器的 log 裡。跟 AI 要「怎麼看 log」,找到裡面那行真正的錯誤才是關鍵。
Maximum call stack size exceeded我遇到 `Maximum call stack size exceeded`。我知道這通常是「無限循環呼叫」造成的。請幫我從這段程式碼找出是哪裡在無限呼叫自己、要怎麼加上停止條件。程式碼:〔貼上你懷疑的那段〕
這個錯誤幾乎都跟某段程式沒有終點、一直重複有關。把最近改動的那段貼給 AI,它很擅長抓出這種迴圈。打個比方,Git 就好像是你的遊戲存檔系統,讓你隨時能回到之前的版本。但存檔合併時偶爾會打結,這一類就是教你怎麼解結,不要慌張刪東西。