作者:
江南白衣 昨天翻翻《程序設計實踐》的Debug一章,里面用C寫的例子早已被風吹的沒了顏色,不隨語言流轉的就只有結尾那幾句經驗談。但大學里向來是連這幾句話也懶得教的,一定要大家從“put print statements in the program to find the bug” 開始,和bugs共同生活幾年后,自個養成條件反射式的debug習慣。
面對Bug,正確的生理反射應當是找線索而不是直接跳到Step 2蠻干:
一、找熟悉的模式。人應該了解自己當然也包括自己常犯的錯誤,還有是檢查那些經常犯事的代碼模塊。
二、最近改過的代碼。
三、如果錯誤是由特定數據和操作引起的,思考這些輸入的特征。
四、如果是系統模塊輸出的錯誤,第一時間拷下來google。(不過也要提防有些系統的輸出信息完全不靠譜)
找沒找到線索,然后都要開始定位錯誤。
定位的方法,是經典不過的--分而治之:注釋一些代碼,減少、hardcode一些輸入值和中間值,函數返回值等等。
如果沒有明顯的線索,可單步執行,同時察看多個變量的debug工具就要及早出場,它能讓你看到程序實際的執行情況而不是你思想里早就預設的誤區。
不過,斷點設在哪里,先注釋、hardcode哪些代碼這種深刻決定debug效率的抉擇,就很講經驗和最近的運勢了!
如果埋頭苦干都沒有結果,那可能是思維有了誤區,就該拉個人過來和你聊一下天氣和這個bug啦(但是注意別拉到太笨的,雞和鴨講的)。又或者,再回頭看看是不是一些極低級的錯誤,比如鏈接庫的版本錯啦,根本沒有重編譯啦....
改完bug后,好習慣是再看一眼別的地方中會不會還有同類的蟲蟲沒殺掉。
----延伸閱讀《Code Complete 2nd》中Debugging 一章。