首頁 >後端開發 >C#.Net教程 >c語言程式的除錯方法

c語言程式的除錯方法

angryTom
angryTom原創
2020-02-20 13:34:3011055瀏覽

c語言程式的偵錯方法

所謂程式偵錯是指程式的查錯和排錯。

調試程式一般應經過以下步驟: 

一、先進行手動檢查,即靜態檢查。

在寫好一個程式以後,不要匆匆忙忙上機,而應對程式進行人工檢查。這一步十分重要,它能發現程式設計人員因為疏忽而造成的

多數錯誤。這一步往往容易被忽視,總希望把一切都推給計算機去做,但這​​樣會多佔用機器時間,作為一個程序人員應當養成嚴謹的作風,每一步都要嚴格把關,不把問題留給後面的工序。 (建議學習:c語言影片教學

為了更有效地進行手動檢查,所編的程式應力求做到以下幾點: 

①應採用結構化程序方法編程,以增加可讀性; 

②盡可能多加註釋,以幫助理解每段程序的作用; 

③在編寫複雜的程序時不要將全部語句都寫在main函數中,而要多利用函數,用一個函數來實作一個單獨的功能。各函數之間除用

參數傳遞資料外,盡量少出現耦合關係,這樣便於分別檢查和處理。

二、在手動檢查無誤後,再上機調試。

透過上機發現錯誤稱為動態檢查。在編譯時會給出語法錯誤的訊息,調試時可以根據提示訊息具體找出程式中出錯之處並改正。應

當注意的是有時提示出錯的地方並不是真正出錯的位置,如果在提示出錯的行找不到錯誤的話應當到上一行再找。有時提示出錯的類型並非絕對準確,由於出錯的情況繁多且各種錯誤互有關聯,因此要善於分析,找出真正的錯誤,而不要只從字面意義上找出錯信息,鑽牛角尖。

如果系統提示的出錯訊息很多,應從上到下逐一修正。有時顯示一大片出錯訊息往往使人感到問題嚴重,無從下手。其實可能

只有一二個錯誤。例如,對使用的變數未定義,編譯時就會對所有包含該變數的語句發出出錯訊息。這時只要加上一個變數定義,就所有錯誤都消除了。

三、在改正語法錯誤(包括「錯誤(error)」和「警告(warning)」)後,程式經過連接(link)就得到可執行的目標程式。執行

程序,輸入程序所需數據,就可得到運行結果。應對運行結果作分析,看它是否符合要求。有的初學者看到運行結果就認為沒問題了,不作認真分析,這是危險的。

有時,數據比較複雜,難以立即判斷結果是否正確。可以事先考慮好一批“試驗數據”,輸入這些數據可以很容易判斷結果正確與

否。例如解方程式ax2 bx c=0,輸入a、b、c的值分別為1、-2、1時,根x的值為1。這是容易判斷的,若根不等於1,程式顯然有錯。

但是,用「試驗資料」時,程式運作結果正確,還不能保證程式完全正確。因為有可能輸入另一組資料時運行結果不對。例如,用公式求根x的值,當a≠0和b2-4ac>0時,能得出正確結果,當a=0或b2-4ac<0時,就得不到正確結果(假設程序中未對a=0作防禦處理以及未作複數處理)。因此應當把程序可能遇到的各種情況都一試到。例如,if語句有兩個分支,有可能程式在經過其中一個分支時結果正確,而經過另一個分支時結果不對。必須考慮周全。事實上,當程序複雜時很難把所有的可能情況全部都試到,選擇典型的臨界數據作試驗即可。

四、運行結果不對,大多屬於邏輯錯誤。對這類錯誤往往需要仔細檢查和分析才能發現。可以採用以下方法: 

1.將程式與流程圖仔細對照,如果流程圖是正確的,程式寫錯了,是很容易發現的。例如,複合語句忘記寫花括弧,只要一對照流

程圖就能很快發現。

2.如果實在找不到錯誤,可以採用「分段檢查」的方法。在程式不同的位置設幾個printf函數語句,輸出有關變數的值,逐段往下

檢查。直到在某一段中找到數據不對為止。這時就已經把錯誤侷限在這段經文中了。不斷減小“查錯區”,就能發現錯誤所在。

3.也可以用「條件編譯」指令進行程式偵錯(在程式偵錯階段,若干printf函數語句就要進行編譯並執行。當偵錯完畢,這些語句

不用再編譯了,也不再被執行了)。這種方法可以不必一一去掉printf函數語句,以提高效率。

4.如果程式中沒有發現問題,就要檢查流程圖有無錯誤,也就是演算法有無問題。如有則改正之,接著修改程序。

5.有的系統還提供debug(調試)工具,追蹤程式並給出相應信息,使用更為方便,請查閱有關手冊。

總之,程式調試是一項細緻深入的工作,需要下功夫,動腦子,善於累積經驗。在程序調試過程中往往反映出一個人的水平,經驗

和態度。希望大家給足夠的重視。上機調試程式的目的絕不是為了“驗證程式的正確”,而是“掌握調試的方法和技術”,要學會自己找問題,這樣慢慢自己就會寫出錯誤較少的實用程式。

更多關於c語言的程式教學,請關注PHP中文網。        

#

以上是c語言程式的除錯方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn