在調試程序時,我們檢查代碼的過程通常會跳過那些自己認為絕對不可能出錯的代碼或邏輯。然而有時候,當檢查了一遍又一遍卻找不到任何出錯的可能性,而程序卻的的確確不是按我們所設想的那樣在運行。這時,很多人就認為自己遇到了靈異事件。這種體驗幾乎每個程序員都有過,但最終往往事實證明,是我們自己錯了,錯在不應該太堅信自己的常識。
詭異現象一:
1bool AllowDisplay = CheckPower();
2p.Visible = AllowDisplay;
3if (p.Visible) {
4 //do something;
5}
注:p是ASPx頁面上聲明的一個<p runat="server" id="p">...</p>標簽。
在運行時發現,無論如何都執行不到if語句內部的do something部分的代碼,即使調試時AllowDisplay的值明明為True也是如此!
以前寫代碼時經常采用類似的做法,都沒出過任何問題,然後現在這個簡單至極的代碼卻讓人摸不著頭腦了。
最後經過多番調試,才找到原因:p的上級容器控件的聲明代碼中被設置了Visible="false"!
詭異現象二:
1OneClass obj = GetOneClass();
2if (obj == null){
3 //do something;
4}
程序運行時,同樣無法執行到if語句內部的do something部分的代碼。這倒不奇怪,奇怪的是,調試發現,在“if (obj == null)”這一行代碼中出現了異常!
按說,無論你obj是不是為空引用,這兒也不應該出錯呀,這行代碼在我的C#編程生涯中可是寫了無數次的,怎麼突然就出問題了呢?
在CSDN上問了,也有很多人回答了,但沒一個人說到真正的症結所在。不得已,只能自己不停地動腦筋加調試,最後找到原因了。這是由於在OneClass這個類定義的操作符重載中,==操作符重載代碼中缺少了對目標對象是否為空引用的判斷,所以在程序運行到“if (obj == null)”時,就陷入了死循環!
以上都是我在參與開發一個“通用信息管理系統”項目的過程中遇到的一些問題。類似的貌似詭異的現象還有不少,不過大多都在通過搜索網絡後得到了答案,就不一一列出了。
最後,請容許我用一行文字宣傳一下我們的作品吧:如果您困擾於ERP的昂貴和繁雜,那麼請到http://landian.cq.cn/體驗一下藍點通用信息管理系統的清爽、時尚和靈活吧,您一定會愛上她!