想像一下…
你剛提交了一題,滿懷信心——範例測資在自己電腦上跑得好好的。結果 OJ 回你一個紅色的 WA。
你把程式碼從頭到尾讀一遍:沒問題。再讀一遍:還是沒問題。半小時過去了,同一份程式碼你已經盯了七、八遍,每一行看起來都對,越看越氣:錯的到底是誰?
先說結論:問題不是你不夠努力,是方法錯了。盯著程式碼看,是效率最低的查錯法。 程式碼是你自己寫的——當初讓你寫出 bug 的那個「想當然」,現在會原封不動地再騙你一次。你讀到第八遍時看到的,仍然是「你以為程式在做的事」,不是「程式實際在做的事」。
抓 bug 跟破案一樣,靠的不是瞪著嫌疑人,而是找證據。本單元就是你的辦案手冊:先建立正確的心法(15.1),然後由淺入深備齊工具——讓編譯器先幫你抓一輪(15.2)、用檢查清單快掃慣犯(15.3)、認識四種卡關情境(15.4)、用 print 除錯看穿程式內部(15.5)、手造測資逼出隱藏錯誤(15.6),最後是兩件延伸武器:全自動抓錯測資的對拍(15.7)與程式自我檢查的 assert(15.8)。
這個單元沒有幾個新語法,卻可能是整本書最劃算的一個單元——語法忘了可以查,查錯的功夫卻會跟著你從 Lv0 一路走到任何地方。