《Visual Basic程序設(shè)計(jì)》課件項(xiàng)目十一_第1頁
《Visual Basic程序設(shè)計(jì)》課件項(xiàng)目十一_第2頁
《Visual Basic程序設(shè)計(jì)》課件項(xiàng)目十一_第3頁
《Visual Basic程序設(shè)計(jì)》課件項(xiàng)目十一_第4頁
《Visual Basic程序設(shè)計(jì)》課件項(xiàng)目十一_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

項(xiàng)目十一程序調(diào)試技巧任務(wù)11.1程序設(shè)計(jì)中的常見錯(cuò)誤類型任務(wù)11.2程序調(diào)試和排錯(cuò)的方法

任務(wù)11.1程序設(shè)計(jì)中的常見錯(cuò)誤類型

任務(wù)導(dǎo)入

為了易于找出程序中的錯(cuò)誤,我們將錯(cuò)誤分為四種類型,即編輯錯(cuò)誤、編譯錯(cuò)誤、運(yùn)行錯(cuò)誤和邏輯錯(cuò)誤。本任務(wù)將介紹VB中的常見錯(cuò)誤,以引起學(xué)生的注意,盡量避免錯(cuò)誤的發(fā)生。學(xué)習(xí)目標(biāo)

(1)了解使用VB編程時(shí)的常見錯(cuò)誤。

(2)能在使用VB編程時(shí)盡量避免出錯(cuò)。任務(wù)實(shí)施

1.了解編輯錯(cuò)誤

當(dāng)用戶在代碼窗口中編輯代碼時(shí),VB會(huì)對(duì)程序直接進(jìn)行語法檢查,當(dāng)發(fā)現(xiàn)程序中存在輸入錯(cuò)誤,如語句沒輸入完、關(guān)鍵字輸入錯(cuò)誤等時(shí),VB會(huì)彈出對(duì)話框,提示出錯(cuò)信息,如圖11.1所示。這時(shí),用戶必須單擊“確定”按鈕,關(guān)閉提示框,程序中出錯(cuò)的位置顯示為紅色,出錯(cuò)部分被高亮度現(xiàn)實(shí),以提示用戶進(jìn)行修改。圖11.1編輯錯(cuò)誤

2.了解編譯錯(cuò)誤

編譯錯(cuò)誤是指單擊了“啟動(dòng)”按鈕,VB開始運(yùn)行程序前,編譯程序段時(shí)產(chǎn)生的錯(cuò)誤。此類錯(cuò)誤是由于用戶未定義變量、遺漏關(guān)鍵字等原因造成的。這時(shí),VB也將彈出對(duì)話框,提示出錯(cuò)信息,如圖11.2所示。出錯(cuò)的位置被高亮度顯示,同時(shí)VB停止編譯。這時(shí),用戶必須單擊“確定”按鈕,關(guān)閉出錯(cuò)對(duì)話框,然后對(duì)出錯(cuò)行進(jìn)行修改。圖11.2編譯錯(cuò)誤

3.了解運(yùn)行錯(cuò)誤

運(yùn)行錯(cuò)誤是指VB在編譯通過后,運(yùn)行代碼時(shí)發(fā)生的錯(cuò)誤。這類錯(cuò)誤往往是由于指令代碼執(zhí)行了非法操作而引起的,如類型不匹配、試圖打開一個(gè)不存在的文件等。

例如,屬性FontSize的類型為整型,若對(duì)其賦值的類型為字符串,則系統(tǒng)運(yùn)行時(shí)將顯示如圖11.3所示的提示出錯(cuò)信息。當(dāng)用戶單擊了“調(diào)試”按鈕后,進(jìn)入中斷模式,光標(biāo)停留在引起出錯(cuò)的位置,此時(shí)允許修改代碼。圖11.3運(yùn)行錯(cuò)誤

4.了解邏輯錯(cuò)誤

程序運(yùn)行后,如果得不到期望的結(jié)果,則說明程序存在邏輯錯(cuò)誤。例如,運(yùn)算符使用不正確、語句的次序不對(duì)、循環(huán)語句的起始值或終值不正確等。通常,邏輯錯(cuò)誤不會(huì)產(chǎn)生錯(cuò)誤提示信息,因此這類錯(cuò)誤較難排除。這時(shí)就需要程序員仔細(xì)地閱讀和分析程序,并要有一定的調(diào)試程序的經(jīng)驗(yàn)。任務(wù)11.2程序調(diào)試和排錯(cuò)的方法

任務(wù)導(dǎo)入

為了更正程序中發(fā)生的不同錯(cuò)誤,VB提供了廣泛的調(diào)試工具。一般的調(diào)試方法是采用設(shè)置斷點(diǎn)、插入觀察變量、逐行執(zhí)行和過程跟蹤等手段,以在調(diào)試窗口中顯示所關(guān)注的信息,或設(shè)置錯(cuò)誤陷阱等。本任務(wù)將介紹程序調(diào)試和排錯(cuò)的方法和

技巧。學(xué)習(xí)目標(biāo)

(1)會(huì)使用設(shè)置斷點(diǎn)、插入觀察變量、逐行執(zhí)行和過程跟蹤等手段排查錯(cuò)誤程序。

(2)會(huì)使用調(diào)試窗口排查錯(cuò)誤程序。

(3)了解設(shè)置錯(cuò)誤陷阱排查錯(cuò)誤程序的方法。任務(wù)實(shí)施

1.了解VB的三種模式

作為一個(gè)集編輯、編譯與運(yùn)行于一體的集成環(huán)境,VB的工作狀態(tài)可分為三種模式:設(shè)計(jì)模式、運(yùn)行模式和中斷模式。為了測(cè)試和調(diào)試應(yīng)用程序,用戶在任何時(shí)候都應(yīng)清楚地知道正處在何種模式下。

1)設(shè)計(jì)模式

在設(shè)計(jì)模式下,可以進(jìn)行程序的界面設(shè)計(jì)、屬性設(shè)置、代碼編寫等,此時(shí)標(biāo)題欄顯示“設(shè)計(jì)”,如圖11.4所示。在此模式下既不能運(yùn)行程序,也不能使用調(diào)試工具。圖11.4設(shè)計(jì)模式

2)運(yùn)行模式

執(zhí)行“運(yùn)行”菜單下的“啟動(dòng)”命令,或按F5鍵,或單擊工具欄上的“啟動(dòng)”按鈕,即可由設(shè)計(jì)模式進(jìn)入運(yùn)行模式。在此模式下,標(biāo)題欄顯示“運(yùn)行”,如圖11.5所示。圖11.5運(yùn)行模式

3)中斷模式

當(dāng)程序運(yùn)行時(shí),單擊“運(yùn)行”菜單→“中斷”命令,或單擊工具欄上的“中斷”按鈕,即可進(jìn)入中斷模式,如圖11.6所示。此時(shí)標(biāo)題欄顯示“break”。當(dāng)程序出現(xiàn)運(yùn)行錯(cuò)誤時(shí),也可以進(jìn)入中斷模式。圖11.6中斷模式

2.插入斷點(diǎn)和逐語句跟蹤

在調(diào)試程序時(shí),通常會(huì)設(shè)置斷點(diǎn)來中斷程序的運(yùn)行,然后逐語句跟蹤和檢查相關(guān)變量、屬性和表達(dá)式的值是否在預(yù)期的范圍內(nèi)。

可在中斷模式下或設(shè)計(jì)模式時(shí)設(shè)置或刪除斷點(diǎn)。當(dāng)應(yīng)用程序處于空閑時(shí),也可在運(yùn)行時(shí)設(shè)置或刪除斷點(diǎn),按下F9鍵,如圖11.7所示,將在程序運(yùn)行到斷點(diǎn)語句處(該語句未執(zhí)行)停下,進(jìn)入中斷模式。在此模式下對(duì)所關(guān)心的變量、屬性、表達(dá)式的值都可以查看。圖11.7插入斷點(diǎn)和逐語句跟蹤在VB中提供了在中斷模式下直接查看某個(gè)變量的值的方法:把鼠標(biāo)指向所關(guān)心的變量處,稍停片刻,在鼠標(biāo)下方就會(huì)顯示該變量的值,如圖11.8所示。圖11.8顯示變量值

3.調(diào)試窗口

在中斷模式下,除了用鼠標(biāo)指向要觀察的變量以直接顯示其值外,還可以通過“立即”窗口、“監(jiān)視”窗口和“本地”窗口觀察有關(guān)變量的值。可單擊“視圖”菜單中的對(duì)應(yīng)命令打開這些

窗口。

1)“立即”窗口

“立即”窗口是所有調(diào)試窗口中使用最方便、最常用的窗口。可以在程序代碼中利用Debug.Print方法把輸出送到“立即”窗口;也可以直接在該窗口使用Print語句或“?”顯示變量的值,如圖11.9所示。圖11.9立即窗口

2)“本地”窗口

“本地”窗口顯示當(dāng)前過程中所有變量的值。當(dāng)程序的執(zhí)行從一個(gè)過程切換到另一過程時(shí),“本地”窗口的內(nèi)容會(huì)發(fā)生改變,它只反映當(dāng)前過程中可用的變量。圖11.10所示為“本地”窗口。圖11.10本地窗口

3)“監(jiān)視”窗口

“監(jiān)視”窗口可顯示當(dāng)前的監(jiān)視表達(dá)式。在此之前必須在設(shè)計(jì)階段,利用“調(diào)試”菜單的“添加監(jiān)視命令”或“快速監(jiān)視”命令來添加監(jiān)視表達(dá)式以及設(shè)置監(jiān)視類型。在運(yùn)行時(shí),監(jiān)視表達(dá)式顯示在“監(jiān)視”窗口,根據(jù)所設(shè)置的監(jiān)視類型進(jìn)行相應(yīng)的顯示。圖11.11所示為“監(jiān)視”窗口。圖11.11監(jiān)視窗口

4.使用OnError語句設(shè)置錯(cuò)誤陷阱

程序員無論多么細(xì)心地調(diào)試程序,都不可能絕對(duì)避免錯(cuò)誤的發(fā)生。在VB中常采用錯(cuò)誤陷阱的方法防止致命錯(cuò)誤的發(fā)生。

設(shè)置錯(cuò)誤陷阱可以使用OnError語句,其語法形式見表11-1。錯(cuò)誤處理程序的設(shè)計(jì)一般可分為以下三步:

(1)使用OnError語句捕獲錯(cuò)誤,并把程序流程轉(zhuǎn)向由標(biāo)號(hào)指示的錯(cuò)誤處理程序段。

(2)編寫錯(cuò)誤處理代碼,對(duì)所有可能預(yù)見的錯(cuò)誤都做出相應(yīng)的安排。

(3)根據(jù)錯(cuò)誤類型可使用Resume語句重新執(zhí)行出錯(cuò)語句,或使用ResumeNext語句執(zhí)行出錯(cuò)語句的下一條語句,并繼續(xù)運(yùn)行程序。

【課堂演練】

【實(shí)例11-1】錯(cuò)誤處理程序示例。建立一個(gè)10次的循環(huán),每次產(chǎn)生兩個(gè)0~9的隨機(jī)整數(shù),并輸出兩數(shù)的商。若出錯(cuò),則執(zhí)行錯(cuò)誤處理語句,顯示信息如圖11.12所示;否則顯示正常信息,如圖11.13所示。圖11.12出錯(cuò)結(jié)束的程序

圖11.13正常結(jié)束的程序

【實(shí)現(xiàn)步驟】

編寫代碼如下:

PrivateSubForm_Load()‘窗體裝入時(shí)執(zhí)行的代碼

Show

Randomize’初始化隨機(jī)數(shù)發(fā)生器

OnErrorGoToaa‘若出現(xiàn)錯(cuò)誤(b=0),則執(zhí)行行標(biāo)號(hào)為aa的程序段

Fori=1To10

a=Int(Rnd*10):b=Int(Rnd*10)‘產(chǎn)生兩個(gè)0~9的隨機(jī)整數(shù)

Printa/b’輸出兩隨機(jī)數(shù)的商

Next

Print“程序正常結(jié)束!”

ExitSub‘退出過程,不執(zhí)行錯(cuò)誤處理語句

aa:

Print“分母為零了,程序結(jié)束!”

EndSub

5.使用Err對(duì)象

Err對(duì)象中包含有關(guān)于運(yùn)行時(shí)錯(cuò)誤的信息。Err對(duì)象的屬性由錯(cuò)誤的生成者來設(shè)置,這個(gè)生成者可以是VB系統(tǒng),可以是對(duì)象,也可以是程序設(shè)計(jì)員。

1)?Err對(duì)象的方法

在Err對(duì)象中使用Clear方法的語法格式為

Err.Clear通常,在處理錯(cuò)誤之后使用Clear方法來清除Err對(duì)象,如在對(duì)OnErrorResumeNext使用拖延錯(cuò)誤處理時(shí)就可使用Clear方法。每當(dāng)執(zhí)行下列語句時(shí)就會(huì)自動(dòng)調(diào)用Clear方法:

任意類型的Resume語句。

ExitSub、ExitFunction、ExitProperty語句。

任何OnError語句。

【課堂演練】

【實(shí)例11-2】Clear方法使用示例。本示例使用Err對(duì)象的Clear方法將Err對(duì)象的數(shù)值屬性重新設(shè)置為零,并將其字符串屬性設(shè)置為零長(zhǎng)度字符串。如果在代碼中省略Clear方法,則每完成一次循環(huán)便會(huì)顯示一次錯(cuò)誤信息(發(fā)生錯(cuò)誤之后),且不管程序中的計(jì)算結(jié)果是否有錯(cuò)誤。

【實(shí)現(xiàn)步驟】

程序代碼如下:

DimResult(10)AsInteger‘聲明數(shù)組變量

’其元素容易溢出

Dimindx

OnErrorResumeNext

'將錯(cuò)誤處理的方式設(shè)為“繼續(xù)下一行”

DoUntilindx=10

'下面計(jì)算若有錯(cuò)誤發(fā)生,便顯示錯(cuò)誤信息

Result(indx)=Rnd*indx*20000

IfErr.Number<>0Then

MsgBoxErr,,"ErrorGenerated:",Err.HelpFile,Err.HelpContext '彈出一個(gè)信息框

Err.Clear '清除Err對(duì)象的屬性

Else

indx=indx+1

EndIf

Loop

2)?Raise方法

若運(yùn)行時(shí)發(fā)生錯(cuò)誤,則Err對(duì)象的屬性被填入明確識(shí)別錯(cuò)誤的信息以及處理這個(gè)錯(cuò)誤所使用的信息。為了在代碼中生成運(yùn)行時(shí)錯(cuò)誤,應(yīng)使用Raise方法。

Raise方法的語法格式為

Err.RaiseNumber,Source,Description,HelpFile,HelpContext

各參數(shù)的含義見表11-2。在任意形式的Resume或OnError語句之后,以及在錯(cuò)誤處理子程序內(nèi)的ExitSub、ExitFunction或ExitProperty語句之后,可將Err對(duì)象的屬性重新設(shè)置為零或長(zhǎng)度為零的字符串("")。可使用Clear方法重新明確設(shè)置E

溫馨提示

  • 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)論