Visual-Basic程序設(shè)計(jì)課件第8章 程序調(diào)試與錯(cuò)誤處理_第1頁
Visual-Basic程序設(shè)計(jì)課件第8章 程序調(diào)試與錯(cuò)誤處理_第2頁
Visual-Basic程序設(shè)計(jì)課件第8章 程序調(diào)試與錯(cuò)誤處理_第3頁
Visual-Basic程序設(shè)計(jì)課件第8章 程序調(diào)試與錯(cuò)誤處理_第4頁
Visual-Basic程序設(shè)計(jì)課件第8章 程序調(diào)試與錯(cuò)誤處理_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第8章程序調(diào)試與錯(cuò)誤處理應(yīng)用程序在運(yùn)行中出現(xiàn)錯(cuò)誤是不可避免的,甚至防不勝防。雖然程序設(shè)計(jì)人員可以消除大部分潛在的錯(cuò)誤,語法錯(cuò)誤也可以在編譯中查出,但不可能消除所有的錯(cuò)誤。因此,必須在系統(tǒng)運(yùn)行階段發(fā)現(xiàn)或捕捉這些不可預(yù)見的錯(cuò)誤。本章介紹VB提供的程序調(diào)試工具和錯(cuò)誤處理程序的設(shè)計(jì)。8.1程序調(diào)試

應(yīng)用程序在運(yùn)行過程中出現(xiàn)錯(cuò)誤是不可避免的,雖然細(xì)心的程序設(shè)計(jì)人員經(jīng)過周密的測(cè)試可以消除許多潛在的錯(cuò)誤,語法錯(cuò)誤也很容易在編譯中查出。實(shí)際上,人們不可能消除所有的錯(cuò)誤。因此,必須在系統(tǒng)運(yùn)行階段發(fā)現(xiàn)或捕捉這些不可預(yù)見的錯(cuò)誤。在應(yīng)用程序中查找并修改錯(cuò)誤的過程稱為調(diào)試。為了分析應(yīng)用程序的運(yùn)行情況,VisualBasic6.0提供了幾種調(diào)試工具。這些工具不但對(duì)查出錯(cuò)誤根源特別有用,而且還能用來改變應(yīng)用程序,或了解其它應(yīng)用程序的工作方式。8.1.1應(yīng)用程序錯(cuò)誤與調(diào)試

1.應(yīng)用程序的錯(cuò)誤為了更有效地使用調(diào)試手段,把可能遇到的錯(cuò)誤分成三類,即編譯錯(cuò)誤、運(yùn)行錯(cuò)誤、邏輯錯(cuò)誤。(1)編譯錯(cuò)誤。編譯錯(cuò)誤是由于不正確構(gòu)造代碼而產(chǎn)生的。如果不正確地鍵入了關(guān)鍵字、遺漏了某些必需的標(biāo)點(diǎn)符號(hào),或在設(shè)計(jì)時(shí)使用了一個(gè)Next語句而沒有For語句與之對(duì)應(yīng)等,VisualBasic在編譯應(yīng)用程序時(shí)將檢測(cè)到這些錯(cuò)誤。編譯錯(cuò)誤還包括語法錯(cuò)誤。

VisualBasic6.0可以檢查大部分的語法錯(cuò)誤。為了檢查語法錯(cuò)誤,可以為VisualBasic6.0設(shè)置自動(dòng)語法檢測(cè)功能。方法:在菜單欄上選擇“工具→選項(xiàng)”選項(xiàng),彈出“選項(xiàng)”對(duì)話框,在“編輯器”選項(xiàng)卡中選定“自動(dòng)語法檢測(cè)”。圖8-1是一個(gè)VisualBasic6.0自動(dòng)檢測(cè)編譯錯(cuò)誤的提示框。圖8-1一個(gè)編譯錯(cuò)誤信息提示框(2)運(yùn)行錯(cuò)誤。應(yīng)用程序在運(yùn)行期間執(zhí)行了一個(gè)不能執(zhí)行的操作時(shí),將會(huì)發(fā)生運(yùn)行錯(cuò)誤。假定有語句:Speed=Miles/Hours

如果變量Hours的值為零,除法是無效操作,盡管語句本身的語法是正確的。必須在運(yùn)行應(yīng)用程序才能檢測(cè)到這個(gè)錯(cuò)誤。(3)邏輯錯(cuò)誤。當(dāng)應(yīng)用程序未按預(yù)期方式執(zhí)行時(shí),產(chǎn)生邏輯錯(cuò)誤。從語法角度來看,發(fā)生邏輯錯(cuò)誤時(shí),應(yīng)用程序的代碼是有效的,在運(yùn)行時(shí)也未執(zhí)行無效操作,只是產(chǎn)生了不正確的結(jié)果。應(yīng)用程序運(yùn)行的正確與否,只有通過測(cè)試應(yīng)用程序和分析產(chǎn)生的結(jié)果才能檢驗(yàn)出來。2.調(diào)試工具欄

VisualBasic6.0不能診斷或更正錯(cuò)誤,但能提供工具幫助用戶分析程序是如何從過程的一部分流向另一部分的,分析變量和屬性是如何隨著語句的執(zhí)行而改變。有了調(diào)試工具,就能深入到應(yīng)用程序內(nèi)部去觀察,從而確定到底發(fā)生了什么,以及為什么會(huì)發(fā)生。

VisualBasic6.0的調(diào)試支持?jǐn)帱c(diǎn)、中斷表達(dá)式、監(jiān)視表達(dá)式、通過代碼一次執(zhí)行一個(gè)語句或一個(gè)過程、顯示變量和屬性的值等方式;還包括專門的調(diào)試功能,比如可在運(yùn)行過程中進(jìn)行編輯、設(shè)置下一個(gè)執(zhí)行語句以及在應(yīng)用程序處于中斷模式時(shí)進(jìn)行過程測(cè)試等。在VisualBasic的“調(diào)試”工具欄上提供了幾個(gè)工具按鈕,如圖8-2所示。啟動(dòng)結(jié)束中斷切換斷點(diǎn)逐過程本地窗口監(jiān)視窗口逐語句跳出立即窗口快速監(jiān)視調(diào)用堆棧表8-1簡要敘述“調(diào)試”工具欄中每個(gè)工具按鈕的作用,從表中可以了解到每個(gè)工具按鈕在什么情況下才能更有效地幫助調(diào)試或分析應(yīng)用程序。表8-1

“Debug”工具及其作用調(diào)試工具作用斷點(diǎn)在“代碼”窗口中確定一行,在該行暫停應(yīng)用程序的執(zhí)行逐語句執(zhí)行應(yīng)用程序代碼的下一個(gè)可執(zhí)行行,并跟蹤到過程中逐過程執(zhí)行應(yīng)用程序代碼的下一個(gè)可執(zhí)行行,但不跟蹤到過程中跳出執(zhí)行當(dāng)前過程的其它部分,并在調(diào)用過程的下一行處中斷執(zhí)行“本地”窗口顯示局部變量的當(dāng)前值“立即”窗口當(dāng)應(yīng)用程序處于中斷模式時(shí),允許執(zhí)行代碼或查詢值“監(jiān)視”窗口顯示選定表達(dá)式的值快速監(jiān)視當(dāng)應(yīng)用程序處于中斷模式時(shí),列出表達(dá)式的當(dāng)前值調(diào)用堆棧處于中斷模式時(shí),打開對(duì)話框來顯示所有已被調(diào)用但尚未完成運(yùn)行的過程8.1.2斷點(diǎn)設(shè)置與立即窗口

1.VisualBasic的模式

VisualBasic的運(yùn)行有三種模式:設(shè)計(jì)模式、運(yùn)行模式(Run)、中斷模式(Break)。啟動(dòng)VisualBasic后進(jìn)入設(shè)計(jì)模式,在設(shè)計(jì)模式下主窗口標(biāo)題欄有“[設(shè)計(jì)]”二字。建立應(yīng)用程序的所有步驟基本上都在設(shè)計(jì)模式下完成。執(zhí)行“啟動(dòng)”命令后進(jìn)入執(zhí)行模式,VisualBasic的主窗口標(biāo)題欄上的“[設(shè)計(jì)]”變成了“[運(yùn)行]”。在運(yùn)行模式下,VisualBasic把全部控制權(quán)都交給應(yīng)用程序,可以調(diào)試應(yīng)用程序,可以查看程序代碼,但不能修改程序代碼,可以執(zhí)行“結(jié)束”命令回到設(shè)計(jì)模式。中斷模式是程序執(zhí)行過程的一個(gè)暫停狀態(tài),進(jìn)入中斷模式后主窗口標(biāo)題欄上的“[運(yùn)行]”變成了“[break]”。在中斷模式下,可以檢查、修改程序代碼,也可以檢查程序中的變量的中間值,還可以繼續(xù)執(zhí)行。2.中斷與程序跟蹤在調(diào)試時(shí),可以在認(rèn)為有問題的代碼處暫停程序執(zhí)行,以便使用調(diào)試工具找出錯(cuò)誤。另外,為了查看程序的執(zhí)行情況,還需要對(duì)程序進(jìn)行跟蹤,以便隨時(shí)發(fā)現(xiàn)錯(cuò)誤。VisualBasic提供斷點(diǎn)和Stop語句,把應(yīng)用程序置于中斷模式之下??梢杂靡韵路椒ㄟM(jìn)入中斷模式:(1)在程序中使用STOP語句,程序運(yùn)行到STOP語句時(shí)進(jìn)入中斷模式;(2)在設(shè)計(jì)模式或中斷模式下設(shè)置程序的斷點(diǎn);(3)程序運(yùn)行時(shí)出現(xiàn)錯(cuò)誤,自動(dòng)進(jìn)入中斷模式;(4)程序運(yùn)行時(shí),按下CTRL+BREAK鍵進(jìn)入中斷模式;(5)程序運(yùn)行時(shí),在菜單欄上選擇“運(yùn)行→中斷”選項(xiàng)進(jìn)入中斷模式;(6)程序運(yùn)行時(shí),單擊工具欄上的“中斷”工具按鈕進(jìn)入中斷模式。設(shè)置斷點(diǎn)的方法:在程序代碼窗口中,將光標(biāo)移至希望中斷的語句上,在菜單欄上選擇“調(diào)試→切換斷點(diǎn)”選項(xiàng),光標(biāo)所在語句設(shè)為斷點(diǎn)。被設(shè)為斷點(diǎn)的語句為反相顯示并在其前面顯示一個(gè)園點(diǎn)。

利用斷點(diǎn)只能粗略地判斷錯(cuò)誤發(fā)生的位置。利用程序跟蹤可以直接看到程序的執(zhí)行情況和執(zhí)行順序,以找到發(fā)生錯(cuò)誤的位置。特別是對(duì)于邏輯錯(cuò)誤,可以跟蹤到程序運(yùn)行的去向。VisualBasic的跟蹤方式包括逐語句執(zhí)行、逐過程執(zhí)行和跳出執(zhí)行。逐語句執(zhí)行是每次只執(zhí)行一個(gè)語句,并根據(jù)輸出結(jié)果判斷執(zhí)行的語句是否正確。逐語句執(zhí)行開始后,程序進(jìn)入執(zhí)行模式,執(zhí)行一條語句后切換到中斷模式,并把下一條語句作為待執(zhí)行的語句。逐過程執(zhí)行與逐語句執(zhí)行基本相同。逐過程執(zhí)行不跟蹤到過程中,即把被調(diào)用的過程當(dāng)作一條語句一次執(zhí)行完畢?!疤觥笨梢詧?zhí)行當(dāng)前過程的其它部分,并在調(diào)用過程的下一行中斷執(zhí)行。若想暫時(shí)避開程序的某一部分,可以通過跳出執(zhí)行來實(shí)現(xiàn)。3.監(jiān)視與監(jiān)視表達(dá)式調(diào)試程序時(shí),一個(gè)計(jì)算可能得不到想要的結(jié)果,當(dāng)某個(gè)變量或?qū)傩匀√囟ǚ秶鷥?nèi)的值時(shí),可能會(huì)出現(xiàn)問題。許多調(diào)試問題不是由單個(gè)語句產(chǎn)生的,因而需要在整個(gè)過程觀察變量或表達(dá)式的情況。VisualBasic自動(dòng)對(duì)監(jiān)視表達(dá)式進(jìn)行監(jiān)視。應(yīng)用程序進(jìn)入中斷模式后,這些監(jiān)視表達(dá)式出現(xiàn)在“監(jiān)視”窗口中,可在該處觀察其值。無論何時(shí),只要表達(dá)式的值改變或等于一個(gè)特定的值,就可把應(yīng)用程序設(shè)置為中斷模式來直接觀察。例如,循環(huán)計(jì)數(shù)器達(dá)到一個(gè)特定值時(shí),可用一個(gè)監(jiān)視表達(dá)式把應(yīng)用程序設(shè)置為中斷模式,而不是一次一條語句執(zhí)行數(shù)十次乃至數(shù)百次循環(huán)。當(dāng)過程中的一個(gè)標(biāo)志值改變時(shí),都可使應(yīng)用程序進(jìn)入中斷模式。在設(shè)計(jì)或中斷模式下,可添加監(jiān)視表達(dá)式。方法:在菜單欄上選擇“調(diào)試→添加監(jiān)視”選項(xiàng),彈出“添加監(jiān)視”對(duì)話框(見圖8-3),在該對(duì)話框中添加監(jiān)視表達(dá)式。在“添加監(jiān)視”對(duì)話框中,“表達(dá)式”框用于輸入監(jiān)視表達(dá)式。表達(dá)式是一個(gè)變量、屬性、函數(shù)調(diào)用或其它任何有效的表達(dá)式。“上下文”選項(xiàng)組用于設(shè)置表達(dá)式中要監(jiān)視變量所處的范圍(位置),當(dāng)有名字相同而范圍不同的變量時(shí),必須使用該選項(xiàng)組??砂驯O(jiān)視表達(dá)式中的變量的范圍限制為由特定過程、特定窗體或模塊組成,也可通過選定“所有過程及所有模塊”,使范圍可用于整個(gè)應(yīng)用程序。“監(jiān)視類型”選項(xiàng)組用來設(shè)置VisualBasic對(duì)監(jiān)視表達(dá)式響應(yīng)的方式。應(yīng)用程序進(jìn)入中斷模式后,系統(tǒng)可對(duì)表達(dá)式進(jìn)行監(jiān)視并顯示其值,在表達(dá)式的值為真(非零),或表達(dá)式的值發(fā)生改變時(shí),可使應(yīng)用程序自動(dòng)進(jìn)入中斷模式。添加監(jiān)視表達(dá)式的步驟如下:(1)在菜單欄上選擇“調(diào)試→添加監(jiān)視”選項(xiàng),彈出“添加監(jiān)視”對(duì)話框。(2)代碼編輯器中的當(dāng)前表達(dá)式將出現(xiàn)“表達(dá)式”框中。如果這不是需要監(jiān)視的表達(dá)式,可在“表達(dá)式”框中直接輸入表達(dá)式。(3)若有必要,設(shè)置要監(jiān)視的變量范圍。如果在“上下文”中選定“過程”或“添加模塊”選項(xiàng),則從相應(yīng)的列表框中選定一個(gè)過程、窗體或模塊名。(4)若有必要,在“監(jiān)視類型”組中選定選項(xiàng)按鈕,以確定對(duì)監(jiān)視表達(dá)式的響應(yīng)方式。(5)單擊“確定”按鈕,完成設(shè)置。也可直接把表達(dá)式從代碼編輯器中拖放到監(jiān)視窗口來添加表達(dá)式。添加的監(jiān)視表達(dá)式都在監(jiān)視窗口中列出,并顯示監(jiān)視表達(dá)式的值、類型等信息,如圖8-4所示。4.立即窗口程序進(jìn)入中斷模式后,將自動(dòng)激活立即窗口;也可以直接在系統(tǒng)菜單欄上選擇“視圖→立即窗口”選項(xiàng),打開立即窗口,如圖8-5所示。若中斷時(shí)程序正在執(zhí)行某個(gè)過程,該過程的代碼窗口與立即窗口一起顯示。在立即窗口中,可以直接執(zhí)行VisualBasic語句,并且不影響代碼窗口中的程序代碼。圖8-4監(jiān)視窗口圖8-5調(diào)試中使用的立即窗口

立即窗口在程序調(diào)試中十分有用,可以用Print方法在立即窗口中輸出(或顯示)程序執(zhí)行的中間結(jié)果;或在程序執(zhí)行過程中顯示、修改變量或某些屬性的值,達(dá)到改變程序運(yùn)行進(jìn)程的目的;還可以用于測(cè)試通用過程,即在一個(gè)通用過程設(shè)計(jì)完成后,進(jìn)入立即窗口,鍵入適當(dāng)?shù)恼Z句調(diào)用通用過程,并根據(jù)過程的運(yùn)行結(jié)果判斷通用過程的執(zhí)行是否正確。8.2.1設(shè)置錯(cuò)誤陷阱語句

VisualBasic用OnError語句捕捉程序運(yùn)行時(shí)的錯(cuò)誤,以便設(shè)置錯(cuò)誤陷阱,并利用ERR對(duì)象及相關(guān)的屬性、方法確定程序運(yùn)行時(shí)的錯(cuò)誤起因,以選擇相應(yīng)的解決措施,實(shí)現(xiàn)在線錯(cuò)誤處理。語句格式:OnError語句有三種基本格式。格式1:OnErrorGoto<行號(hào)>

格式2:OnErrorGoto0

格式3:OnErrorResumeNext

功能:設(shè)置或取消錯(cuò)誤捕捉功能。說明:(1)在程序中,用OnError語句設(shè)置的錯(cuò)誤捕捉功能一直起作用,直到另一個(gè)OnError語句取消所設(shè)置的錯(cuò)誤捕捉功能。在錯(cuò)誤捕捉處理程序起作用期間,一旦發(fā)生錯(cuò)誤,程序即轉(zhuǎn)向指定的行標(biāo)號(hào)并執(zhí)行錯(cuò)誤處理程序。(2)格式1設(shè)置從指定行號(hào)開始的錯(cuò)誤處理程序。<行號(hào)>可以是任意的行標(biāo)號(hào)或行號(hào),并且要求與OnError語句在同一過程內(nèi)。(3)格式2取消已設(shè)置(或激活)的錯(cuò)誤捕捉程序。在已設(shè)置錯(cuò)誤捕捉處理程序的情況下,執(zhí)行該語句將已激活的錯(cuò)誤處理程序變成無效。(4)格式3指明發(fā)生運(yùn)行錯(cuò)誤時(shí)程序跳過錯(cuò)誤繼續(xù)執(zhí)行,即發(fā)生錯(cuò)誤時(shí),不對(duì)錯(cuò)誤作任何處理,直接跳到產(chǎn)生錯(cuò)誤語句的下一個(gè)語句繼續(xù)執(zhí)行。若希望在程序出錯(cuò)時(shí)進(jìn)行錯(cuò)誤處理,必須用格式1重新設(shè)置其它錯(cuò)誤處理,或用格式2取消該錯(cuò)誤捕捉功能。例如:PrivateSubForm_Load()OnErrorGotoErrLine

…Ifn=100OnErrorResumeNextEndIf

…ExitSubErrLine:

…EndSub8.2.2

Resume語句

語句格式:該語句有三種格式。格式1:Resume

格式2:ResumeNext

格式3:Resume<行號(hào)>

功能:該語句放在錯(cuò)誤處理程序中,指定執(zhí)行錯(cuò)誤處理程序后繼續(xù)執(zhí)行的語句,以便在指定位置恢復(fù)程序的執(zhí)行。說明:該語句與Return語句類似,但只能用于錯(cuò)誤處理程序中,即必須與OnError語句配套使用。8.2.3

Err對(duì)象和Erl函數(shù)

Err對(duì)象含有關(guān)于運(yùn)行出錯(cuò)時(shí)的錯(cuò)誤信息,其屬性由錯(cuò)誤的生成者設(shè)置。該錯(cuò)誤生成者可能是VisualBasic系統(tǒng),也可能是某個(gè)對(duì)象,或者是程序設(shè)計(jì)者。Err對(duì)象的默認(rèn)屬性是Number。該默認(rèn)屬性可以直接用對(duì)象名稱Err表示,所以不必修改以前用Err函數(shù)或Err語句書寫的程序代碼。出現(xiàn)錯(cuò)誤時(shí),Err返回錯(cuò)誤的代碼,錯(cuò)誤代碼的取值范圍為1~32767。常見錯(cuò)誤代碼及對(duì)應(yīng)錯(cuò)誤信息見附錄E。

Erl函數(shù)返回錯(cuò)誤語句的行號(hào)。若發(fā)生錯(cuò)誤的程序沒有行號(hào),則Erl函數(shù)總是返回0。雖然VisaulBasic中也可以使用行號(hào),但行號(hào)只是某一行的標(biāo)識(shí),且與舊版本Basic語言兼容,與程序的執(zhí)行順序無關(guān)。只有在發(fā)生錯(cuò)誤時(shí),Err對(duì)象和Erl函數(shù)才返回有意義的值,通常把它們放在錯(cuò)誤處理程序中,用來確定所發(fā)生的是什么錯(cuò)誤,以及采取什么操作糾正錯(cuò)誤。[例8-1]以下程序可以查出錯(cuò)誤代碼對(duì)應(yīng)的錯(cuò)誤信息。

PrivateSubCommand1_Click()DimMsg,Nl,UsrErrOnErrorGoToErrHandNl=Chr(10)Msg="請(qǐng)輸入一個(gè)錯(cuò)誤號(hào)查看相應(yīng)錯(cuò)誤信息."UsrErr=InputBox(Msg)ErrorUsrErrExitSubErrHand:Msg="錯(cuò)誤號(hào)"&Err&"的錯(cuò)誤信息是:"&Nl&Nl&""""&Error(Err)&""""MsgBoxMsgResumeNextEndSub[例8-2]錯(cuò)誤處理程序?qū)嵗?。[程序代碼]

PublicSubOnErrorDemo()

OnErrorGotoErrorHandler ‘設(shè)置錯(cuò)誤陷阱

Open“testfile”ForOutputas#1

Kill“testfile”

OnErrorGoto0 ‘關(guān)閉錯(cuò)誤陷阱

OnErrorResumeNext ‘跳過錯(cuò)誤繼續(xù)執(zhí)行

ObjectRef=GetObject(“MyWord.Basic”)

IfErr.Number=440Then ‘OLE自動(dòng)化錯(cuò)誤

Msg=“TherewasanerrorattemptingtoopentheOLEobject!”

MsgBoxMsg,,“DeferredErrorTest”

Err.Clear ‘清除Err對(duì)象字段

EndIf

ExitSub

ErrorHandler: ‘錯(cuò)誤處理程序

SelectCaseErr.Number ‘計(jì)算錯(cuò)誤號(hào)

Case55 ‘”Fileareadyopen”

錯(cuò)誤

Close#1CaseElse

…EndSelectResume ‘返回引發(fā)錯(cuò)誤的那行語句繼續(xù)執(zhí)行

EndSub8.2.4錯(cuò)誤處理程序

應(yīng)用程序運(yùn)行過程中,出現(xiàn)錯(cuò)誤是不可避免的。硬件出現(xiàn)的問題或用戶出乎意料的操作,都會(huì)造成運(yùn)行出錯(cuò),這些錯(cuò)誤可能使程序意外地終止,一般無法使應(yīng)用程序繼續(xù)運(yùn)行。有些錯(cuò)誤也許不會(huì)中斷程序運(yùn)行,但可能使代碼產(chǎn)生意想不到的結(jié)果。因此,必須用OnError語句捕獲錯(cuò)誤并執(zhí)行錯(cuò)誤處理程序,以避免應(yīng)用程序不必要的意外中斷。在程序設(shè)計(jì)中,通過設(shè)置錯(cuò)誤對(duì)象Err的各種屬性,如錯(cuò)誤號(hào)、描述等,使應(yīng)用程序在錯(cuò)誤發(fā)生時(shí)可以對(duì)錯(cuò)誤狀況作出響應(yīng)或處理。例如,可用以下代碼處理無效驅(qū)動(dòng)器等類型的問題:FunctionFileExists(filename)AsBooleanDimMsgAsStringOnErrorGoToCheckError‘檢測(cè)到錯(cuò)誤,則響應(yīng)錯(cuò)誤處理程序

FileExists=(Dir(filename)<>“”)ExitFunction‘如果未出現(xiàn)錯(cuò)誤,則避免使用錯(cuò)誤處理程序CheckError:‘如果出現(xiàn)錯(cuò)誤,則在此分支。

ConstmnErrDiskNotReady=71,mnErrDeviceUnavailable=68

‘定義常數(shù)以表示固定的VisualBasic錯(cuò)誤代碼

If(Err.Number=MnErrDiskNotReady)Then

‘vbExclamation、vbOK、vbCritical和vbOKCancel等是定義在VB類型庫中的常數(shù)

Msg=“Putafloppydiskinthedrive“

Msg=Msg&“andclosethedoor.”IfMsgBox(Msg,vbExclamation&vbOKCancel)=vbOKThen

‘顯示具有感嘆號(hào)圖標(biāo)以及“確定”和“取消”按鈕的消息框

ResumeElseResumeNextEndIf

ElseIfErr.Number=MnErrDeviceUnavailableThenMsg=“Thisdriveorpathdoesnotexist:“Msg=Msg&filenameMsgBoxMsg,vbExclamationResumeNextElseMsg=“Unexpectederror#”&Str(Err.Number)Msg=Msg&“occurred:“&Err.DescriptionMsgBoxMsg,vbCriticalStop‘用“Stop”信號(hào)燈圖標(biāo)和“確定”按鈕顯示消息框。

EndIfResumeEndFunction程序中,Err對(duì)象的Number屬性包含錯(cuò)誤號(hào),它與運(yùn)行時(shí)產(chǎn)生的錯(cuò)誤相關(guān)聯(lián)。Err對(duì)象的Description屬性包含錯(cuò)誤信息的簡短描述。當(dāng)系統(tǒng)產(chǎn)生“磁盤未準(zhǔn)備”的錯(cuò)誤時(shí),代碼顯示一段信息,通知用戶選擇兩個(gè)按鈕之:“確定”或“取消”。如果選擇“確定”,則Resume語句將操作返回到出錯(cuò)的語句處,并重新執(zhí)行該語句。若錯(cuò)誤已得到改正,則操作獲得成功;否則程序又返回到錯(cuò)誤處理程序。如果選擇“取消”,則ResumeNext語句將控制程序返回出錯(cuò)語句之后的語句繼續(xù)執(zhí)行。若出現(xiàn)意想不到的錯(cuò)誤,將顯示一段簡短的描述,說明錯(cuò)誤的性質(zhì)并在Stop語句處終止代碼。錯(cuò)誤處理程序是應(yīng)用程序中捕獲和響應(yīng)錯(cuò)誤的程序。對(duì)于預(yù)感可能會(huì)出錯(cuò)的任何過程(除非確知不會(huì)發(fā)生錯(cuò)誤,否則應(yīng)假定任何語句都可能導(dǎo)致錯(cuò)誤),均要對(duì)這些過程添加錯(cuò)誤處理程序。設(shè)計(jì)錯(cuò)誤處理程序包括三個(gè)步驟:1.設(shè)置錯(cuò)誤捕獲當(dāng)應(yīng)用程序執(zhí)行到OnError語句時(shí),激活錯(cuò)誤捕獲,用OnError語句指定錯(cuò)誤處理程序開始的標(biāo)號(hào)。當(dāng)錯(cuò)誤發(fā)生時(shí),通知應(yīng)用程序在分支點(diǎn)設(shè)置或激活錯(cuò)誤捕獲。當(dāng)包含錯(cuò)誤捕獲的過程處于活動(dòng)時(shí),錯(cuò)誤捕獲始終是激活的,即直到該過程執(zhí)行ExitSub、Exit函數(shù)、Exit屬性、EndSub、End函數(shù)或End屬性語句時(shí),錯(cuò)誤捕獲才停止。盡管在任一時(shí)刻任一過程中只能激活一個(gè)錯(cuò)誤捕獲,但可建立幾個(gè)供選擇的錯(cuò)誤捕獲并在不同的時(shí)刻激活不同的錯(cuò)誤捕獲程序。2.編寫錯(cuò)誤處理程序錯(cuò)誤處理程序應(yīng)對(duì)所有能預(yù)見的錯(cuò)誤都作出響應(yīng)或處理。錯(cuò)誤處理程序的第一步,是添加行標(biāo)號(hào),行標(biāo)號(hào)標(biāo)志著錯(cuò)誤處理程序的開始。行標(biāo)號(hào)應(yīng)該有一個(gè)具有描述性的名稱,其后必須加冒號(hào)。基本的約定:把錯(cuò)誤處理代碼放在過程末端,該過程在緊靠行標(biāo)號(hào)前方處使用ExitSub、Exit函數(shù)或Exit屬性語句。這樣,如果未出現(xiàn)錯(cuò)誤,過程可避免執(zhí)行錯(cuò)誤處理代碼。

錯(cuò)誤處理程序體包含實(shí)際處理錯(cuò)誤的代碼,通常以SelectCase或If...Then...

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論