VB程序調(diào)試與錯誤處理.ppt_第1頁
VB程序調(diào)試與錯誤處理.ppt_第2頁
VB程序調(diào)試與錯誤處理.ppt_第3頁
VB程序調(diào)試與錯誤處理.ppt_第4頁
VB程序調(diào)試與錯誤處理.ppt_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、第 9 章,錯誤處理,程序調(diào)試,與,程序調(diào)試的主要任務(wù):查找程序的錯誤和排除錯誤 本章主要內(nèi)容 VB程序中的錯誤類型 程序工作模式 程序調(diào)試 錯誤處理,第9章 程序調(diào)試與錯誤處理,三類錯誤類型:編譯錯誤,邏輯錯誤和運行錯誤 1. 編譯錯誤 編譯錯誤是指在程序編譯過程中出現(xiàn)的錯誤。通常是由于不正確書寫代碼而產(chǎn)生的。 例如:關(guān)鍵字寫錯,遺漏標(biāo)點符號,括號不匹配等。 較為容易排除。VB提供了自動語法檢查功能,能指出并顯示這些錯誤,幫助用戶糾正語法錯誤。 例子: Foor t = 1 To 100,9.1 VB程序中的錯誤類型,2. 運行錯誤 運行時的錯誤是指應(yīng)用程序在運行期間執(zhí)行了非法操作所發(fā)生的錯

2、誤。 例如,除法運算中除數(shù)為零,訪問文件時文件夾或文件找不到等。這種錯誤只有在程序運行時才能被發(fā)現(xiàn)。 舉例(“下標(biāo)越界”): Private Sub Form_Load() Dim D(20) As Integer, k As Integer For k=1 To 30 D(k)=k*K Next k End Sub,3. 邏輯錯誤 邏輯錯誤使程序運行時得不到預(yù)期的結(jié)果。這種程序沒有語法錯誤,也能運行,但卻得不到正確的結(jié)果。 例如,在一個算術(shù)表達(dá)式中,把乘號“*”寫成了加號“+”,條件語句的條件寫錯,循環(huán)次數(shù)計算錯誤等 例如,要求10!,若采用: Private Sub Form_Load()

3、 Dim t As Integer For i=1 To 10 t=t*i Next i Show :Print t End Sub 運行程序時輸出的結(jié)果是0 通常,調(diào)試程序過程中所花的大部分時間和精力都在邏輯錯誤上,三種工作模式:設(shè)計模式、運行模式和中斷模式 1設(shè)計模式 在設(shè)計模式下,可以建立應(yīng)用程序的用戶界面,設(shè)置控件的屬性,編寫程序代碼等 2. 運行模式 在運行模式下,可以測試程序的運行結(jié)果,可以與應(yīng)用程序?qū)υ?,還可以 查看程序代碼,但不能修改程序 3. 中斷模式 在中斷模式下,可以利用各種調(diào)試手段檢查或更改某些變量或表達(dá)式的值,或者在斷點附近單步執(zhí)行程序,以便發(fā)現(xiàn)錯誤或改正錯誤,9.2

4、 程序工作模式,進入中斷模式的方法: (1)在代碼中插入Stop語句; (2)在代碼窗口中設(shè)置斷點(用菜單命令); (3)在代碼窗口中設(shè)置斷點(鼠標(biāo)操作); (4)在程序運行時強制“中斷”; (5)當(dāng)程序運行出現(xiàn)錯誤。 當(dāng)檢查調(diào)試通過后,需要清除斷點,程序調(diào)試一般包括靜態(tài)檢查和動態(tài)檢查 9.3.1 靜態(tài)檢查與動態(tài)檢查 靜態(tài)檢查程序的基本方法是逐行逐句地讀程序,弄清楚每條語句的作用,預(yù)見每條語句和模塊的執(zhí)行結(jié)果,判斷是否與預(yù)期結(jié)果相一致,這就是靜態(tài)檢查,也稱人工檢查。 靜態(tài)檢查無誤后,就可以進行更有效的動態(tài)檢查。通過上機調(diào)試來發(fā)現(xiàn)錯誤稱為動態(tài)檢查。 動態(tài)檢查的基本方法是輸入一組典型的數(shù)據(jù)來運行程

5、序。程序?qū)@些數(shù)據(jù)處理結(jié)果應(yīng)是已知的,通過運行后實際結(jié)果和預(yù)想結(jié)果相比較,可以判斷程序的正確性,9.3 程序調(diào)試,例如,為了檢驗求解一元二次方程ax2+bx+c=0的程序(見第四章例4.14)是否正確,我們可以輸入以下四組a,b,c的數(shù)值: 第一組:0,1,1 預(yù)期結(jié)果:顯示“不是二次方程”第二組:1,-2,1 預(yù)期結(jié)果:x1=1,x2=1(兩個相等實根)第三組:1,1,-2 預(yù)期結(jié)果:x1=1,x2=-2(兩個不等實根)第四組:1,2,2 預(yù)期結(jié)果:x1=-1+i, x2=-1-i(兩個共軛復(fù)根) 動態(tài)檢查中,通常在一些敏感點處設(shè)置斷點,檢查一些變量或表達(dá)式的值。,使用“調(diào)試”菜單或“調(diào)試”

6、工具欄 1切換斷點 “切換斷點”按鈕用來設(shè)置斷點 2. 逐語句 VB允許逐條語句執(zhí)行程序,每執(zhí)行一條語句后就返回中斷模式。 如果執(zhí)行的是過程調(diào)用的代碼(如Call),“逐語句”操作也會跟蹤到被調(diào)過程中繼續(xù)一條語句一條語句的執(zhí)行 3. 逐過程 逐過程執(zhí)行是以整個函數(shù)或過程為一個整體,一次執(zhí)行。逐過程與逐語句一樣,能夠一條語句一條語句地執(zhí)行代碼。把被調(diào)用的函數(shù)或過程當(dāng)作一個語句來看待,9.3.2 使用VB調(diào)試工具,4. 跳出 單擊“調(diào)試”工具欄上的“跳出”按鈕,則VB將連續(xù)執(zhí)行完該過程的其余部分,返回調(diào)用過程的下一條語句并回復(fù)中斷模式 5. 本地窗口 顯示當(dāng)前過程中所有變量和活動窗體的所有屬性值

7、Me代表當(dāng)前窗體;單擊“+”號或“-”號 6. 立即窗口 可以檢查某個屬性或者變量的值,也可以對表達(dá)式求值,或為變量或?qū)傩再x值等 7. 監(jiān)視窗口 對用戶定義的表達(dá)式進行監(jiān)視,例9.1 運行以下的窗體裝載事件過程: Private Sub Form_Load() Dim a% a% = 5: a = 5.4 c = 1 / (a - a%) End Sub 運行時出錯,消息框提示發(fā)生“除數(shù)為零”的錯誤。 單擊消息框中的“調(diào)試”按鈕,即可進入中斷模式,VB在代碼窗口中用箭頭指示發(fā)生錯誤的語句“C=1/(a-a%)”。 在立即窗口中鍵入以下命令來檢查變量的值: ? a, a% ?是Print的簡寫

8、出錯前變量a的當(dāng)前值為整數(shù)5,而不是5.4,故發(fā)生了“除數(shù)為零”的錯誤,編寫的程序代碼如下: Private Sub Form_Load() Show Dim t As Single, i As Single t = 0 For i = 0.1 To 1 Step 0.1 t = t + i Next i Print 總和:; t End Sub 運行結(jié)果為: 總和:4.5 這不是正確的答案,正確結(jié)果應(yīng)是5.5,例9.2 計算t = 0.1 + 0.2 + 0.3 + + 0.9 + 1,利用調(diào)試工具來查找出錯原因,操作步驟如下: (1)在代碼窗口中設(shè)置斷點。為了了解循環(huán)過程中變量i和t的變化

9、情況,可在語句t = t + i 處設(shè)置斷點。,(2)重新運行程序。程序在斷點處中斷運行,進入中斷模式,(3)單擊“調(diào)試”工具欄上的“本地窗口”按鈕,利用本地窗口來監(jiān)視過程中各量及屬性值的變化情況,(4)單擊“調(diào)試”工具欄上的“逐語句”按鈕,讓程序單步執(zhí)行。 “本地窗口”會顯示出程序中所用變量的當(dāng)前值。 (5)連續(xù)單擊“逐語句”按鈕,使程序在For語句循環(huán)執(zhí)行9次,此時本地窗口顯示的變量值如圖9.7所示,(6)再次單擊“逐語句”按鈕。程序不再繼續(xù)循環(huán),而是退出循環(huán),去執(zhí)行Next i下一個的Print語句。 可以發(fā)現(xiàn)上述循環(huán)語句只是循環(huán)9次。本來應(yīng)該循環(huán)10次,但由于小數(shù)點在機器內(nèi)存儲和處理會

10、發(fā)生微小誤差,當(dāng)執(zhí)行到第9次循環(huán)時,循環(huán)變量i的值為0.9000001,再加上步長值0.1時,已經(jīng)超過1,往下就不再執(zhí)行循環(huán)體了。所以實際上才循環(huán)9次,即只計算0.1 + 0.2 + 0.3 + + 0.9(=4.5) 當(dāng)步長值為小數(shù)時,為了防止丟失循環(huán)次數(shù),可將終值適當(dāng)增加,一般是加上步長值的一半,例如: For i=0.1 To 1.05 Step 0.1 調(diào)試程序往往比寫程序更難,由于應(yīng)用環(huán)境等的改變,有時程序還會出現(xiàn)錯誤。例如文件未找到等。這類“運行時錯誤”并非致命的錯誤。 對于這些可預(yù)見的錯誤,可以利用VB的錯誤處理程序捕獲它,對其進行適當(dāng)?shù)奶幚恚⑹钩绦蚶^續(xù)執(zhí)行。這樣就能夠使開發(fā)的

11、軟件具有更強的適應(yīng)性。 9.4.1 錯誤處理的步驟 (1)利用Err對象記錄錯誤的類型、出錯原因等。 (2)強制轉(zhuǎn)移到用戶自編的“錯誤處理程序段”的入口。 (3)在“錯誤處理程序段”內(nèi),根據(jù)具體錯誤進行處理,如果問題有解決方法,則在處理后返回原程序某處繼續(xù)執(zhí)行,否則,停止程序執(zhí)行,9.4 錯誤處理,Err對象是全局性的固有對象,用來保存最新的運行時錯誤信息,其屬性由錯誤生成者設(shè)置 1. 主要屬性 (1)Number屬性:為數(shù)值類型,范圍為065535,保存錯誤號。 (2)Source屬性:為字符串,指明錯誤產(chǎn)生的對象或應(yīng)用程序的名稱。 (3)Description屬性:為字符串,用于記錄簡短的

12、錯誤信息描述。 2. 常用方法 (1)Clear方法:用于清除Err對象的當(dāng)前屬性值。 (2)Raise方法:產(chǎn)生錯誤,用于調(diào)試錯誤處理程序段。 例如,執(zhí)行語句Err.Raise 55將產(chǎn)生55號運行時錯誤,即“文件已打開”錯誤,9.4.2 Err對象,使用On Error語句可以捕獲錯誤,其語法格式如下: On Error 標(biāo)號 通常,該語句放置在過程的開始位置。在程序運行過程中,當(dāng)該語句后面的代碼出錯時,則程序就會自動跳轉(zhuǎn)到標(biāo)號所指定的程序行去運行 標(biāo)號所指示的程序行通常為錯誤處理程序段的開始行 一個使用錯誤處理的示例: On Error GoTo ErrLine 以后出錯時轉(zhuǎn)移至ErrL

13、ine . . . ErrLine: 標(biāo)號 . . . Resume 返回語句,9.4.3 捕獲錯誤語句(On Error),當(dāng)指定的錯誤處理完成后,應(yīng)該控制程序返回到合適的位置繼續(xù)執(zhí)行。 返回語句Resume有三種用法: (1)Resume 0:程序返回到出錯語句處繼續(xù)執(zhí)行。 (2)Resume Next:程序返回到出錯語句的下一語句。 (3)Resume 標(biāo)號:程序返回到標(biāo)號處繼續(xù)執(zhí)行。,9.4.4 退出錯誤處理語句(Resume),輸入某個數(shù),求該數(shù)的平方根。當(dāng)用戶輸入負(fù)數(shù)時,使用On Error.Resume進行處理 Private Sub Form_Load() Dim x As S

14、ingle, y As Single, i As String On Error GoTo errln 以下出錯時轉(zhuǎn)移到errln Show : i = i 為實數(shù)標(biāo)記 x = Val(InputBox(請輸入一個數(shù)) y = Sqr(x) Print y; i : Exit Sub 顯示及退出過程 errln: 標(biāo)號 If Err.Number = 5 Then 本錯誤的錯誤碼為5 x = -x 轉(zhuǎn)換為正數(shù) i = i 復(fù)數(shù)標(biāo)記 Resume 返回 Else 其他錯誤處理 MsgBox (錯誤發(fā)生在 & Err.Source & , 代碼為 & _ Err.Number & , 即 & Err.Descr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論