2007年1月26日 星期五

Exception在網路程式的重要性

剛剛與一個網路程式奮戰一晚,終於將程式中的問題找出來了。

我以一個事先寫好的telnet server當作平台,測試自己的thread與telnet操作技巧,在完成了一些基礎的輸入輸出功能後,擺在自己的機器上測試。
ok,一切就緒,提槍上馬,果然馬上就出問題。當我在client端輸入任何字串都平安無事,但在不輸入任何字元的情況下按下enter,居然就當了!
後來搞清楚,因為我的程式會對輸入字串的第一個字元檢查,而不輸入任何字元得到的字串是"",因此根本沒有第一個字元這種東西,當然會當掉。

第二個問題是,當我利用不正常方法斷線(直接關掉視窗),之後再連線,輸入完帳號密碼後馬上會被斷線。之後知道是因為我的不正常斷線會讓thread卡在無窮迴圈while(!exit)readLine()之中,因此任何對這個斷線thread輸出文字的舉動當然會造成IOException,但之前我將IOException的處理程式寫成啥都不做,自然就沒有任何除錯訊息可以讓我看,害我白白浪費依堆時間找錯。

這次的經驗告訴我們:一旦一段程式會丟出Exception,最好還是將他用try/catch包住並列印錯誤訊息,否則就乖乖往外throw吧,別把try/catch寫出來了卻不做任何處理!之後的debug時一定會後悔的!

沒有留言: