業界總是有高手之說,高手成了程式設計師心中之偶像,成了程式設計師成長之目標。但是,現實中人們往往對自己所了解的程式設計師,很難認同為高手;人們反而對那些自己不了解的,甚至是道聽途說的人會認作為高手了。高手,同武林高手一樣,神秘之至。
許多程式設計師都有這樣的經歷:無論自己編寫什麼很短很短的程式,一般是很難一次就能通過編譯的;通過編譯的其功能還不一定是正確的。我在很早就注意這樣現象了,開始的時候,我還不信這個邪,還試著編寫程式看看自己能否一次能否編譯成功,為這個事還和別人打過賭呢!這當然是年輕時做過的事了。後來我漸漸明白了,程式設計出錯是程式設計的乙個重要的部分!出錯是正常的,不出錯才是不正常的。出錯怎麼辦?當然是改錯啦!不知道錯在什麼地方怎麼辦?當然是除錯啦!除錯於是和程式設計相依相伴了。程式設計師不但要會編寫程式,還要會除錯程式。
程式出錯一般有:未定義、語法、執行出錯三個方面。
1、 未定義
未定義往往是程式設計師的忽略定義或定義後名稱與定義不一致造成的。
1) 要避免忽略定義這個問題,程式設計師首先要養成嚴謹工作的習慣:「先定義,後使用」。
2) 解決定義名字與使用名字不一致問題,程式設計師在對函式名、變數名、檔名、資料庫名、表名、欄位名定義的時候,不要信手拈來,象不花錢似的任意取名。一定要定下心來慢慢地斟酌,這個名字自己不但要能懂能記得,別人一看也要能懂能記得。程式設計師可以假設自己定義乙個變數就要花出去100元錢,如果別人看不懂就要另外支付200元。有了這種名字的「有償使用」,這樣程式設計師就不可能亂取名了。長此以往,在使用這些名字的時候程式設計師就會有行雲流水感覺,而且很少出錯。
2、 語法問題
1) 新手程式設計走一步乙個跟頭,走兩步兩個跟頭,主要是對語言的語法不熟悉,丟三拉四,關鍵字拚錯等。這種情況不可怕,多看看語法說明,多改改程式就會對語法越來越熟悉了。
2) 老程式設計師語法問題出現較少。但是,很多情況下程式設計師在使用新語言程式設計序的時候,會採用老語言的語法,反之亦然,導致出錯。例如,某人先使用c語言,後使用vfp。當用vfp程式設計的時候,往往習慣性地在語句後面加上「;」,這導致vfp語法出錯。當熟悉vfp後,再編寫c語言的時候,往往在語句後面忘記加上「;」,導致c語言語法出錯。類似常見問題如:if語句後面表示式是否要加「()」等,for 語句,while 語句,case語句在不同的語言的語法都有可能不同。另外,不同資料庫中的select 、insert、語法都有一些不同處,這些不同之處,往往讓程式設計師不知所措,老是要停下來思考一下,現在用的是什麼語言用的是什麼語法。
3、 執行問題
定義、語法這些都是顯式出錯,相對好解決。但是執行中出現錯誤就五花八門了,我試著歸納一下:
1) 執行中程式突然中斷了並退出了。
往往是記憶體出錯!可查變數、指標是否越界,指標是否為空等、例外沒有處理。
2) 環境問題
例如,資料庫密碼錯導致資料庫開啟不了、要開啟的檔案不存在、引數定義錯,參數列為空,參數列沒有預設值等。
3) 程式的輸出的不是自己的預期結果
往往是程式邏輯和演算法存在問題。
4) 程式不停地執行沒有停止的跡象
查一下迴圈的條件表示式是否永真、導致死迴圈。
5) 程式無法退出
程式亂了,導致記憶體錯,覆蓋了退出指令!
6) 程式執行了很長時間才出現了錯誤
累計誤差、資料原因造成的錯誤等。
出錯是必然的,如何找出錯誤,有些人編寫c語言的人只會用在可能出錯的語言前後,通過顯示語句print來判別出錯的原因。他們不懂debug、 sdb、 dbx等除錯工具,來除錯程式,他們會編不會調。我們很難想象不會除錯的程式設計師是如何程式設計的,除錯對於程式設計師如此重要,以致於可導致出「不會除錯的程式設計師就不是程式設計師」的結論。
現在的開發語言具有功能豐富的除錯命令。無論用什麼設計語言除錯,你只要注意掌握以下幾個命令或操作,就能入門除錯了:
1、 執行程式
2、 設定斷點、取消斷點
3、 執行到斷點
4、 單步跟蹤(setp into)
5、 單步執行(step over)
6、 顯示變數、物件、源程式
7、 退出除錯
你可以按此去尋找相應的命令和操作,並熟記於心中!此法必有大用。
通過除錯,程式設計師可以學會如何運用斷點、如何最快地找到可疑語句,如何很迅速地找到問題所在從而改進程式。而不斷地除錯,使得程式設計師不停進行除錯操作,變成了操作高手。除錯內容可以說千變萬化,技巧也多多,關鍵看程式設計師的積累。例如,迴圈語句除錯的技巧、同步非同步除錯的技巧、中斷除錯技巧、外設除錯技巧、資料庫除錯技巧、邊界除錯技巧、例外除錯技巧、遮蔽法除錯技巧、替代法除錯技巧、介面除錯技巧等等。
除錯象開車一樣,不會開的時候,程式設計師有恐懼感,會開了以後,程式設計師特別想調,開多了,程式設計師越發老練,除錯操作越來越快、對問題發生的原因和糾正方法也熟記於心中,技巧也油然而生,積累越來越多。
好的程式設計師不但除錯自己的程式,而且會幫助其他程式設計師解決調不出來的程式的問題。程式設計師在幫助別人的時候,更能盡顯除錯才華,成為真正的除錯高手。
除錯總的目標是為了糾正程式的錯誤。但是,除錯也可用於其他的用途。例如,我經常會先把函式的呼叫語句給寫好,但是不寫函式體,這樣每次編譯都會出現函式沒有發現的提示。我不寫函式體的目的,就是讓每次編譯的時候提示我還有多少函式沒有編寫。讓我對這個函式加深印象,給我有時間思考這個函式如何編寫。當其他語句編寫完後,我再乙個乙個把沒有編寫的函式內容補上,這個時候編寫就快的多了。有的時候,我還喜歡看到幾十條上百條的出錯提示,然後,我感覺於乙個改錯就能消滅幾十個錯誤的快感之中,然後再改再調,直到無錯。除錯成了我娛樂程式設計的一部分。
通過除錯你也會發現:程式設計水平直接影響到除錯。如果程式很具有模組性,除錯起來就很快,幾個或十幾個單步執行就會到達程式的任何地方,如果程式本身邏輯性不強,變數命名不準確、乙個函式內語句有數十條數百條,那你幾百個單步執行都到達不了你想要達到的地方,程式除錯起來就會很麻煩,而且不容易定位出錯的地方。所以除錯高手往往會改進自己的程式設計,使得程式設計水平日益提高,成為程式設計高手。
《除錯高手和程式設計高手》
業界總是有高手之說,高手成了程式設計師心中之偶像,成了程式設計師成長之目標。但是,現實中人們往往對自己所了解的程式設計師,很難認同為高手 人們反而對那些自己不了解的,甚至是道聽途說的人會認作為高手了。高手,同武林高手一樣,神秘之至。許多程式設計師都有這樣的經歷 無論自己編寫什麼很短很短的程式,一般是...
除錯高手和程式設計高手
業界總是有高手之說,高手成了程式設計師心中之偶像,成了程式設計師成長之目標。但是,現實中人們往往對自己所了解的程式設計師,很難認同為高手 人們反而對那些自己不了解的,甚至是道聽途說的人會認作為高手了。高手,同武林高手一樣,神秘之至。許多程式設計師都有這樣的經歷 無論自己編寫什麼很短很短的程式,一般是...
什麼程式設計高手?
曾經一直疑惑,什麼才是真正的程式設計高手?我們公司的一線架構師告訴我們,程式設計高手的最高境界是熟悉你定義的每乙個識別符號的長度,那就是高手!有些時候我們會覺得高手是乙個熟悉一門程式設計工具的才叫高手,但其實不然。其實開發工具終究是開發工具,就像劍客中的劍。高手之所以高手,而在於他得劍招,而劍招並不...