版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第14章 VB程序調(diào)試與錯誤處理初步,第14章 VB程序調(diào)試與錯誤處理初步,教學提示:本章主要介紹VB的程序調(diào)試技術(shù),其中包括VB編程過程中常見的錯誤類型的產(chǎn)生和表現(xiàn),以及利用VB提供的調(diào)試工具和語句對程序錯誤進行捕獲、處理和修改的方法。VB為廣大用戶提供了功能強大的程序調(diào)試工具,使用戶能夠迅速排除編程中出現(xiàn)的問題。 本章主要介紹:VB程序錯誤的種類、錯誤處理的方法以及程序代碼調(diào)試的方法,第14章 VB程序調(diào)試與錯誤處理初步,14.1 錯誤的種類 14.2 錯誤處理 14.3 代碼調(diào)試 14.4 小結(jié) 14.5 思考與練習,14.1 錯誤的種類,14.1.1 語法錯誤 14.1.2 運行錯誤
2、14.1.3 邏輯錯誤,14.1.1 語法錯誤,語法錯誤是存在于代碼中的語言結(jié)構(gòu)方面的錯誤。比如,拼寫錯誤、缺少操作對象、不符合語法規(guī)則等錯誤都屬于語法錯誤。 例如,我們要輸入下列代碼: Private Sub Form_Load() Dim i As Integer Dim j As Integer Dim sum As Integer sum = 0 For i = 1 To 100 For j=1 100 End Sub,14.1.1 語法錯誤,由于我們不小心將語句:For j=1 To 100書寫成 For j=1 100(漏掉了To),則當用戶按下Enter鍵的時 候,Visual
3、Basic就會立刻測出這樣的錯誤,會提示 用戶“缺少To”,如下圖所示,14.1.2 運行錯誤,運行錯誤是指在運行程序的時候發(fā)生的錯誤。這些錯誤在編寫的過程中,因為它們符合語法規(guī)則,所以不會被識別出來,也不會在編譯的時候被發(fā)現(xiàn)。它們往往是由于進行了某種錯誤的操作造成的。 例如,下面一段代碼: Private Sub Command1_Click() Dim number As Integer Dim total As Double Dim aver As Double total = Val(Text1.Text) number = Val(Text2.Text) aver = total /
4、 number Text3.Text = aver End Sub,14.1.2 運行錯誤,該程序在計算平均值時,很有可能在沒有提供參數(shù)number,或者提供了不合法的值,則會產(chǎn)生除數(shù)為0的錯誤,從而引起程序的崩潰。如下圖所示,這時,用戶可以單擊【結(jié)束】按鈕來結(jié)束程序,也可以單擊 【調(diào)試】按鈕來發(fā)現(xiàn)是哪一條語句發(fā)生了錯誤,以便于修改,14.1.3 邏輯錯誤,邏輯錯誤指的是程序可以執(zhí)行,但就是得不到用戶所希望的結(jié)果。這并不是程序語句的錯誤,而是由于程序設(shè)計時本身存在的邏輯缺陷而導(dǎo)致的。如定義了錯誤的變量類型,或程序中出現(xiàn)了不正確的循環(huán)次數(shù)或死循環(huán)等等。 大多數(shù)邏輯錯誤不容易發(fā)覺是在哪一條語句發(fā)生
5、的,而且錯誤產(chǎn)生的原因與產(chǎn)生錯誤結(jié)果的語句之間可能隔有很多語句。因此,對于邏輯錯誤一般要使用單步執(zhí)行和監(jiān)視的方法來查找錯誤的根源,14.2 錯 誤 處 理,對于程序中可能出現(xiàn)的錯誤都要進行處理,否則會使應(yīng)用程序崩潰。但是,有的錯誤是用戶無法避免的。例如,當光驅(qū)中沒有光盤時,用戶訪問了光驅(qū),這時,系統(tǒng)會產(chǎn)生一個“設(shè)備沒有準備好”的錯誤。 在Visual Basic中,允許使用錯誤處理方法來對可能出現(xiàn)的錯誤進行預(yù)先處理。所謂錯誤處理,就是提供發(fā)生錯誤時執(zhí)行的代碼,也相當于是程序運行的一部分。當一個錯誤發(fā)生的時候,應(yīng)用程序應(yīng)該可以探測到這一個錯誤,并且進行相應(yīng)的錯誤處理。用戶應(yīng)當在可能產(chǎn)生錯誤的地方
6、放置錯誤探測語句,同時,在同一個程序中放置錯誤的處理代碼。通常含有錯誤的探測捕捉和處理 設(shè)置錯誤的捕捉陷阱,即在程序中可能出現(xiàn)錯誤的地方放置捕捉語句來捕獲產(chǎn)生錯誤的語句。 編寫錯誤處理程序,即當程序中出現(xiàn)錯誤的時候,程序?qū)⑦\行用戶指定的程序。 退出錯誤處理程序,即在處理錯誤之后,應(yīng)該恢復(fù)原來的一些參數(shù),然后讓程序繼續(xù)正常地運行下去,14.2 錯 誤 處 理,14.2.1 錯誤捕獲 14.2.2 激活錯誤捕獲功能 14.2.3 編制錯誤處理程序,14.2.1 錯誤捕獲,當程序中的某行代碼試圖執(zhí)行一項非法的操作時,將產(chǎn)生運行時錯誤(Run-Time Error)。例如,當我們的程序需要打開某個特定
7、的文件時,如果這個文件被誤刪了,就會產(chǎn)生運行時錯誤“file not found”(文件未找到),如下圖所示,再如,當我們的程序要從軟盤中讀取文件時,如果軟驅(qū)中 沒有軟盤,就會產(chǎn)生運行時錯誤“Disk not ready”(磁盤沒有準 備好,14.2.1 錯誤捕獲,通過這些例子可以看出,運行時錯誤是無法避免的。但是,一旦出現(xiàn)運行時錯誤,將造成程序崩潰。因此,我們必須對可能發(fā)生的錯誤進行處理。 許多運行時的錯誤只能靠用戶來解決,比如插入軟盤。因此,我們必須在系統(tǒng)發(fā)出錯誤之前,截獲錯誤,在錯誤處理程序中提示用戶采取措施,是解決問題還是取消操作。如果用戶解決了問題(如插入了軟盤),我們的程序就能夠繼
8、續(xù)執(zhí)行,如果用戶選擇取消操作,我們就可以跳過這段程序,而繼續(xù)執(zhí)行后面的程序。 這就是處理運行時錯誤的方法,我們將這個過程稱為錯誤捕獲(Error Trapping,14.2.2 激活錯誤捕獲功能,在我們捕獲運行時錯誤之前,首先要激活錯誤捕獲功能,這項任 務(wù)是由On Error語句來完成的。On Error語句共有3種格式。 On Error Goto 行號 此語句的功能是激活錯誤捕獲,并將錯誤處理程序指定為從“行號” 位置開始的程序段。 例如: Private Sub Form_Load() Dim r As VbMsgBoxResult On Error GoTo notready ChDr
9、ive A Exit Sub notready: r = MsgBox(請插入軟盤!, vbRetryCancel + vbCritical, 缺少軟盤) If r = vbRetry Then Resume End Sub,14.2.2 激活錯誤捕獲功能,這是一個典型的錯誤處理過程。首先,我們可以預(yù)料到在此過程中有可能出現(xiàn)運行時錯誤,因此,在過程開始時,我們使用On Error GoTo notready激活錯誤捕獲功能,并指定從行號“notready”開始的程序段為錯誤處理程序(注意,行號后面要加一個冒號,但在語句On Error GoTo notready中不加冒號)。這樣,當程序運行到
10、語句“ChDrive ”A“”并發(fā)生錯誤時,將執(zhí)行行號“notready”后面的語句。如果不發(fā)生錯誤,當執(zhí)行到語句“Exit Sub”時,將退出過程。在過程退出時,錯誤捕獲功能就自動被取消了。 2. On Error Resume Next 此語句的功能是忽略錯誤,繼續(xù)往下執(zhí)行。使用這種格式的語句,它可以激活錯誤捕獲功能,但并不指定錯誤處理程序,當錯誤發(fā)生時,不做任何處理,緊接著從發(fā)生錯誤語句之后的語句繼續(xù)執(zhí)行,14.2.2 激活錯誤捕獲功能,例如,如下一段代碼: Private Sub Form_Load() On Error Resume Next ChDrive A FileCopy r
11、eadme.txt, d:read.txt End Sub 這段程序的功能是拷貝“A”盤中的“readme.txt”文件到“D”盤。假設(shè)當前驅(qū)動器是“C”盤,如果在執(zhí)行語句“ChDrive ”A“”時出錯,就忽略此項操作,繼續(xù)留在“C”盤。并將“C”盤當前目錄下的“Readme.txt”文件拷貝到“D”盤,如果在“FileCopy ”readme.txt“, ”d:read.txt“”語句再出現(xiàn)錯誤,那么干脆什么都不做自動退出此過程。 3. On Error Goto 0 此語句用來關(guān)閉錯誤捕獲功能。當用戶確定已經(jīng)沒有錯誤產(chǎn)生或者錯誤已經(jīng)得到處理,就可以關(guān)閉錯誤捕獲功能。要注意,錯誤捕獲功能一
12、旦被激活,將保持到過程結(jié)束,如果我們要在過程結(jié)束之前就關(guān)閉此功能,應(yīng)使用“On Error Goto 0”語句,14.2.3 編制錯誤處理程序,在捕獲到運行時錯誤后,接下來就是要執(zhí)行錯誤處理程序。在錯誤處理程序中,我們要針對錯誤的類型,向用戶提供解決的方法,然后根據(jù)用戶的選擇,進行相應(yīng)的處理。 在Visual Basic中,每當產(chǎn)生錯誤的時候,都會將當前錯誤的編號和描述存儲在Err對象中。因此,我們可以通過這個對象來判斷當前產(chǎn)生的是什么錯誤。Err對象是一個具有全局范圍的固有對象,用戶不必在程序中重新定義它。 Err對象最常用的屬性是Number屬性和Description屬性。Number屬
13、性存儲當前錯誤的編號,Description屬性存儲當前錯誤的描述,14.2.3 編制錯誤處理程序,Visual Basic中的常見錯誤碼及其描述如下表所示,14.2.3 編制錯誤處理程序,Number屬性的出現(xiàn)為錯誤的幾種處理提供了很好的方法。 根據(jù)用戶不同的選擇,返回的位置有所不同,如果用戶解決了問題,并選擇重試,就應(yīng)該返回到產(chǎn)生錯誤的語句重新執(zhí)行,如果用戶選擇取消操作,就應(yīng)該跳過產(chǎn)生錯誤的語句,返回到它的下一行語句繼續(xù)執(zhí)行。 從錯誤處理程序中返回時,我們使用Resume語句。根據(jù)不同的返回位置,Resume語句可分為3種: Resume 0:返回到產(chǎn)生錯誤的語句重新執(zhí)行?!?”可以省略。
14、 Resume Next:跳過產(chǎn)生錯誤的語句,返回到它的下一行語句繼續(xù)執(zhí)行。 Resume 行號:返回到行號指定的位置繼續(xù)執(zhí)行,14.2.3 編制錯誤處理程序,下面我們來看一個例子: Private Sub Form_Load() Dim r As VbMsgBoxResult On Error GoTo eh ChDrive A FileCopy readme.txt, d:readme.txt Exit Sub eh: Select Case Err.Number Case 71 r = MsgBox(請插入軟盤!, vbRetryCancel + vbCritical, 缺少軟盤!) I
15、f r = vbRetry Then Resume Else Resume Next End If Case 53 r = MsgBox(找不到文件,請將文件恢復(fù)后重試., vbRetryCancel + vbCritical, 缺少文件!) If r = vbRetry Then Resume End Select End Sub,14.2.3 編制錯誤處理程序,我們通常使用Select Case語句來判斷錯誤的類型。在這個例子中,“磁盤沒有準備好”是71號錯誤,“找不到文件”是53號錯誤。對于不同的錯誤類型,程序?qū)⑾蛴脩籼崾静煌男畔?。在這個例子中,對于“磁盤沒有準備好”的錯誤,程序?qū)⑾蛴?/p>
16、戶提示插入軟盤,當用戶單擊“重試”按鈕時,程序使用Resume語句返回到產(chǎn)生錯誤的行“ChDrive A”。如果這時用戶已經(jīng)插入軟盤,這行語句將不會再產(chǎn)生錯誤,因此程序?qū)⒗^續(xù)執(zhí)行。如果用戶單擊“取消”按鈕,程序?qū)⑹褂肦esume Next 語句返回到產(chǎn)生錯誤的下一行“FileCopy readme.txt, d:readme.txt”繼續(xù)執(zhí)行,14.3 代 碼 調(diào) 試,有時,程序中不存在語法錯誤或運行時錯誤,也沒有執(zhí)行非法操作的語句,但是程序運行的結(jié)果卻是不正確的。我們稱這種錯誤為邏輯錯誤。例如,使用了錯誤的公式或局部變量與全局變量混用了等。 程序運行時對于邏輯錯誤并沒有任何的提示,我們只能深
17、入到程序的內(nèi)部,一步步地執(zhí)行程序,觀察程序的執(zhí)行過程,從而找出隱藏在程序中的邏輯或運行時錯誤。我們將這個過程稱為調(diào)試。調(diào)試是一種查找錯誤的手段,而不是處理或改正錯誤的手段,Visual Basic為用戶提供了功能強大的調(diào)試工具,對于錯誤程序的更正有很大的幫助,而且可以跟蹤程序的執(zhí)行過程。調(diào)試工具包含【設(shè)置斷點】、【單步執(zhí)行】、【顯示變量內(nèi)容】等。下面,我們就來學習一下,如何利用Visual Basic為用戶提供的調(diào)試工具來調(diào)試程序。首先,單擊【視圖】菜單中的【工具欄】命令,打開【調(diào)試】工具欄。如下圖所示,14.3 代 碼 調(diào) 試,14.3 代 碼 調(diào) 試,14.3.1 中斷程序的執(zhí)行 14.3
18、.2 跟蹤操作,14.3.1 中斷程序的執(zhí)行,中斷程序的執(zhí)行是指當程序運行到某一行語句時,就進入中斷狀態(tài),不再繼續(xù)執(zhí)行。這樣我們就可以在中斷狀態(tài)下調(diào)試程序。常用的方法是通過設(shè)置斷點來實現(xiàn),下面我們來看看有關(guān)斷點的操作。 1. 設(shè)置斷點 將插入點放在要設(shè)置斷點的行,然后使用下述操作之一便可為該行設(shè)置斷點: 選擇【調(diào)試】菜單中的【切換斷點】命令。 單擊調(diào)試工具欄中的按鈕。 按F9鍵,14.3.1 中斷程序的執(zhí)行,為某一行設(shè)置了斷點后,該行代碼將以紅底白字顯示,并在邊界指示條中出現(xiàn)一個紅色的圓圈,表示這一行代碼已被設(shè)置了斷點。如圖14.5所示,2. 清除斷點 對已設(shè)置斷點的行,再執(zhí)行和上面相同的操作
19、便可清除斷點。 3. 清除所有斷點 選擇【調(diào)試】菜單中的【清除所有斷點】命令?;虬础綜trl+Shift+F9】鍵,14.3.2 跟蹤操作,14.3.2 跟蹤操作,2. 逐過程執(zhí)行 此項操作單步執(zhí)行代碼,如果碰到過程調(diào)用,則不進入該過程,也就是說,將過程調(diào)用看作一行語句來執(zhí)行。 逐過程執(zhí)行代碼有下面3種方法。 選擇【調(diào)試】菜單中的【逐過程】命令。 單擊調(diào)試工具欄中的 按鈕。 按Shift+F8鍵。 3. 跳出過程 此項操作將當前過程中執(zhí)行點后面的語句全部執(zhí)行,并將下一執(zhí)行點定位在調(diào)用該過程的語句的下一行。 跳出過程有下面3種方法。 選擇【調(diào)試】菜單中的【跳出】命令。 單擊調(diào)試工具欄中的 按鈕。
20、 按Ctrl+Shift+F8鍵,14.3.2 跟蹤操作,提示: 如果在執(zhí)行點后面的語句中存在斷點,那么跳出過程命令將使程序執(zhí)行到下一斷點。也就是說,斷點的級別要高于跳出過程命令。 Visual Basic的程序調(diào)試技術(shù)和錯誤處理技術(shù)是相當完善的,本章只是簡單地介紹了程序調(diào)試和錯誤處理的初步知識,目的是為了讓用戶掌握調(diào)試程序的基本方法,并養(yǎng)成良好的編程習慣,為日后的學習和工作打下良好的基礎(chǔ),14.4 小 結(jié),14.4 小 結(jié),1)常見的錯誤有“語法錯誤”、“運行時錯誤”和“邏輯錯誤”。 (2)語法錯誤是存在于代碼中的語言結(jié)構(gòu)方面的錯誤。運行錯誤是指在運行程序的時候發(fā)生的錯誤。而邏輯錯誤則不同,
21、它指的是程序可以執(zhí)行,但就是得不到用戶所希望的結(jié)果,這是由于程序設(shè)計時本身存在的邏輯缺陷而導(dǎo)致的。 (3)所謂錯誤處理,就是提供發(fā)生錯誤時執(zhí)行的代碼,通常包含有錯誤的探測捕捉和處理,即設(shè)置錯誤的捕捉陷阱、編寫錯誤處理程序和退出錯誤處理程序。 (4)所謂錯誤捕獲就是我們必須在系統(tǒng)發(fā)出錯誤之前,截獲錯誤,在錯誤處理程序中提示用戶采取措施,是解決問題還是取消操作。激活錯誤捕獲功能一般有3種格式:On Error Goto 行號 、On Error Resume Next、On Error Goto 0,14.4 小 結(jié),5)在編制錯誤處理程序中,我們要針對錯誤的類型,向用戶提供解決的方法,然后根據(jù)用戶的選擇,進行相應(yīng)的處理。一般我們可以利用Err對象的Number屬性和Description屬性的值編制錯誤處理程序, (6)Visual Basic為用戶提供
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 承包豆渣合同范例
- 廣告制作合同范例清單
- 室內(nèi)泥工合同范例
- 2024年蚌埠小型客運從業(yè)資格證理論考題
- 2024年山南客運資格證試題完整版
- 藥物警戒糾正和預(yù)防措施管理規(guī)程
- 國際酒店廚師長聘任協(xié)議
- 大型火車站預(yù)應(yīng)力施工合同
- 滑雪場建設(shè)泥水施工協(xié)議
- 旅游服務(wù)行業(yè)安全防護策略
- 資方和項目方的合作協(xié)議范本
- 習作單元解讀及其教學策略
- “雙減”背景下小學排球運動發(fā)展路徑探索
- 八年級地理上冊第一、二章測試題及(答案)
- 【語文】黃岡市四年級上冊期末復(fù)習試卷(含答案)
- 滑雪教練職業(yè)規(guī)劃書
- 期中測試卷(試題)北師大版三年級上冊數(shù)學
- 第七節(jié)-感染性心內(nèi)膜炎病人的護理課件
- 裝修常用數(shù)據(jù)手冊(空間布局和尺寸)
- 礦產(chǎn)資源“三率”指標要求+第14部分:飾面石材和建筑用石料礦產(chǎn)
- 2023年年產(chǎn)500噸頭孢氨芐的車間工藝設(shè)計
評論
0/150
提交評論