iT邦幫忙

DAY 21
7

程式設計心法系列 第 21

程式設計心法:20.除錯(Debug)

「大錯特錯,不要來,污辱我的美」

是的,寫程式最怕的就是除不完的錯!User 執行程式突然出現一個警告視窗,例如:

如果您的程式執行到一半也出現不知名的錯誤訊息,那您的電話就接不完了!

除錯,顧名思義就是把那個錯誤給找出來,錯誤在電腦中的專有名詞就叫做 Bug(臭蟲)。這個名詞,據說是在大型電腦時代,工程人員在電腦的內部線路中發先一隻「蛀蟲」,以至於後來大家都將電腦上的錯誤歸咎於「蟲」了。
當然,我們不是來講除錯的高深技術。現在有很多幫助偵錯的軟體或 Framework 可以追蹤與記錄程式的執行過程(如:log4j),有一些觀念是應該要有的。

.除錯前,先備份原始程式碼
萬事不如備份急!再怎麼急,先備份再說(當然透過版本管理工具是一種更好的方法)!
不然哀嚎聲響起時,已經是輕舟已過萬重山了。

.一次只修改一個地方
不用貪心,錯誤不會自動消失。改完馬上看看結果對不對,改愈多,愈不容易發現問題的所在。

.檢查修正的結果
改完之後,是不是原來的情況就不發生了?或是又衍生出其他的問題?檢查,是必要的工作!

.尋找類似的錯誤
不用急著將改過的程式上線,找看看,是不是有類似的地方需要修正的,把他改完,測完再上線吧!

.錯誤不會平白無故消失
很多時候,錯誤找不出來,但是卻不再出現了?這時候我們常會說,這是靈異事件!但是,錯誤不會平白無故消失的,只是當時的環境並沒有被記錄下來,所以無從判斷錯誤發生的原因(所以要藉助記錄器),這是要提醒我們,不要有僥倖的心態,有時間還是要把問題找出來!

.發現錯誤,立即修正
不要輕忽小錯誤!小錯誤累積久了就變成大錯誤了!發現有錯誤,立即修正,也是修正自己寫程式心態的好方法,正所謂「誤因惡小而為之」。養成好習慣,對寫程式是很有用的。

.不要隨便更動現有的程式
閒閒沒事,把程式找出來再練一練,以前的寫法真是可笑啊!發現新的撰寫方法,如獲至寶,趕快把他引進程式中,大大改寫一番!奉勸您,絕對不要這樣做!尤其是線上運作的系統!因為線上運作的系統表示已經穩定了,任何的異動,可能造成系統不穩定,所必須付出的代價,可是無法估算。所以,控制住您的衝動。

.測試永遠不嫌多
不要以為自己很了不起!我寫的程式,「啊!不會有錯的啦!不用測了!」。不要鐵齒,錯誤就是會發生在這個地方,屢試不爽。所以該做的,該測的,都不要輕忽他!

.不要等到程式全寫完之後,再來除錯
跟前面,發現錯誤立即修正是一樣的意思。很多時候,我們會一直寫一直寫,寫到欲罷不能,滿足了,才來開始 Debug,這樣並不會縮短除錯的時間,反倒會增加找錯誤的時間。

當然,心態是很重要的。有一些小技巧,是可以幫助我們來加速找到錯誤的地方,或縮小問題範圍的。
.判斷錯誤的根源
通常 User 只會跟你說,電腦當掉了!然後一問三不知,這時候您還要跑去他的電腦看是什麼問題(或是遠端遙控桌面),如果程式的訊息能夠提供一些有用的資訊,是可以幫助我們找到問題發生的地方,讓我們聚焦在一個範圍內的。如賦予訊息的編號,或程式畫面的編號、程式代碼等等都是不錯的方式。

.對曾經出現錯誤的地方保持戒心
曾經出錯過的地方,最好將改正的方式以註解記錄下來,這樣養成習慣之後,常犯的錯誤就不會再發生了。

.檢查最近修改的程式碼
一個執行穩定的系統,突然間發生錯誤,最可能的情況就是最近所更動的程式所產生的,養成良好的記錄習慣,先從最近修改的程式找起,可能會比較容易找到問題。

.跟別人說說您所遭遇的問題
真的找不到怎麼辦?放心,You are not alone,廣大的網海,到處有指引的名燈!您的同事、朋友,論壇中的高手**(如 iT 邦幫忙)**,他們都是可以適時伸出援手的人,但請記得,將您的問題消化過再問吧!

.休息片刻
這其實是最有效的方法!想到腦筋打結了,也許倒個水,上個廁所,突然福至心靈,問題也就解決了。這是告訴我們,休息是為了走更長遠的路!

本系列文章


上一篇
程式設計心法:19.說明文件
下一篇
程式設計心法:21.Error Handling
系列文
程式設計心法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
海綿寶寶
iT邦大神 1 級 ‧ 2009-10-27 09:21:53

經驗談,推推推 bbb

同場加映笑話一則

有一天
專案經理、硬體工程師、軟體工程師開一輛車出差
過了一個下坡後汽車不動了
此時要debug(除錯)了

專案經理:趕時間,我們改坐計程車
硬工程師:車上有備品,我來換零件,再試試看
軟工程師:我們先把車子推上去,再滑下來一次,比較能查出問題

我要留言

立即登入留言