c語言程序調(diào)試方法整理
c語言程序的調(diào)試方法
所謂程序調(diào)試是指對程序的查錯和排錯。
調(diào)試程序一般應經(jīng)過以下幾個步驟:
一、先進行人工檢查,即靜態(tài)檢查。
在寫好一個程序以后,不要匆匆忙忙上機,而應對程序進行人工檢查。這一步十分重要,它能發(fā)現(xiàn)程序設計人員由于疏忽而造成的
多數(shù)錯誤。這一步往往容易被人忽視,總希望把一切都推給計算機去做,但這樣會多占用機器時間,作為一個程序人員應當養(yǎng)成嚴謹?shù)淖黠L,每一步都要嚴格把關,不把問題留給后面的工序。
為了更有效地進行人工檢查,所編的程序應力求做到以下幾點:
①應當采用結構化程序方法編程,以增加可讀性;
②盡可能多加注釋,以幫助理解每段程序的作用;
③在編寫復雜的程序時不要將全部語句都寫在main函數(shù)中,而要多利用函數(shù),用一個函數(shù)來實現(xiàn)一個單獨的功能。各函數(shù)之間除用
參數(shù)傳遞數(shù)據(jù)外,盡量少出現(xiàn)耦合關系,這樣便于分別檢查和處理。
二、在人工檢查無誤后,再上機調(diào)試。
通過上機發(fā)現(xiàn)錯誤稱為動態(tài)檢查。在編譯時會給出語法錯誤的信息,調(diào)試時可以根據(jù)提示信息具體找出程序中出錯之處并改正。應
當注意的是有時提示出錯的地方并不是真正出錯的位置,如果在提示出錯的行找不到錯誤的話應當?shù)缴弦恍性僬?。有時提示出錯的類型并非絕對準確,由于出錯的情況繁多且各種錯誤互有關聯(lián),因此要善于分析,找出真正的錯誤,而不要只從字面意義上找出錯信息,鉆牛角尖。
如果系統(tǒng)提示的出錯信息很多,應當從上到下逐一改正。有時顯示出一大片出錯信息往往使人感到問題嚴重,無從下手。其實可能
只有一二個錯誤。例如,對使用的變量未定義,編譯時就會對所有含該變量的語句發(fā)出出錯信息。這時只要加上一個變量定義,就所有錯誤都消除了。
三、在改正語法錯誤(包括“錯誤(error)”和“警告(warning)”)后,程序經(jīng)過連接(link)就得到可執(zhí)行的目標程序。
運行
程序,輸入程序所需數(shù)據(jù),就可得到運行結果。應當對運行結果作分析,看它是否符合要求。有的初學者看到運行結果就認為沒問題了,不作認真分析,這是危險的。
有時,數(shù)據(jù)比較復雜,難以立即判斷結果是否正確??梢允孪瓤紤]好一批“試驗數(shù)據(jù)”,輸入這些數(shù)據(jù)可以很容易判斷結果正確與
否。例如解方程ax2+bx+c=0,輸入a、b、c的值分別為1、-2、1時,根x的值是1。這是容易判斷的,若根不等于1,程序顯然有錯。
但是,用“試驗數(shù)據(jù)”時,程序運行結果正確,還不能保證程序完全正確。因為有可能輸入另一組數(shù)據(jù)時運行結果不對。例如,用公式求根x的值,當a≠0和b2-4ac>0時,能得出正確結果,當a=0或b2-4ac<0時,就得不到正確結果(假設程序中未對a=0作防御處理以及未作復數(shù)處理)。因此應當把程序可能遇到的各種情況都一一試到。例如,if語句有兩個分支,有可能程序在經(jīng)過其中一個分支時結果正確,而經(jīng)過另一個分支時結果不對。必須考慮周全。事實上,當程序復雜時很難把所有的可能情況全部都試到,選擇典型的臨界數(shù)據(jù)作試驗即可。
四、運行結果不對,大多屬于邏輯錯誤。對這類錯誤往往需要仔細檢查和分析才能發(fā)現(xiàn)。可以采用以下辦法:
1.將程序與流程圖仔細對照,如果流程圖是正確的,程序寫錯了,是很容易發(fā)現(xiàn)的。例如,復合語句忘記寫花括弧,只要一對照流
程圖就能很快發(fā)現(xiàn)。
2.如果實在找不到錯誤,可以采用“分段檢查”的方法。在程序不同的位置設幾個printf函數(shù)語句,輸出有關變量的值,逐段往下
檢查。直到找到在某一段中數(shù)據(jù)不對為止。這時就已經(jīng)把錯誤局限在這一段中了。不斷減小“查錯區(qū)”,就能發(fā)現(xiàn)錯誤所在。
3.也可以用“條件編譯”命令進行程序調(diào)試(在程序調(diào)試階段,若干printf函數(shù)語句就要進行編譯并執(zhí)行。當調(diào)試完畢,這些語句
不用再編譯了,也不再被執(zhí)行了)。這種方法可以不必一一去掉printf函數(shù)語句,以提高效率。
4.如果在程序中沒有發(fā)現(xiàn)問題,就要檢查流程圖有無錯誤,即算法有無問題。如有則改正之,接著修改程序。
5.有的系統(tǒng)還提供debug(調(diào)試)工具,跟蹤程序并給出相應信息,使用更為方便,請查閱有關手冊。
總之,程序調(diào)試是一項細致深入的工作,需要下功夫,動腦子,善于積累經(jīng)驗。在程序調(diào)試過程中往往反映出一個人的水平,經(jīng)驗
和態(tài)度。希望大家給以足夠的重視。上機調(diào)試程序的目的決不是為了“驗證程序的正確”,而是“掌握調(diào)試的方法和技術”,要學會自己找問題,這樣慢慢自己就會寫出錯誤較少的實用程序。
到此這篇關于c語言程序調(diào)試方法整理的文章就介紹到這了,更多相關c語言程序的調(diào)試方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++?Protobuf實現(xiàn)接口參數(shù)自動校驗詳解
用C++做業(yè)務發(fā)開的同學是否還在不厭其煩的編寫大量if-else模塊來做接口參數(shù)校驗呢?今天,我們就模擬Java里面通過注解實現(xiàn)參數(shù)校驗的方式來針對C++?protobuf接口實現(xiàn)一個更加方便、快捷的參數(shù)校驗自動工具,希望對大家有所幫助2023-04-04