




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)網(wǎng)絡(luò)安全管理的關(guān)鍵要素試題及答案
- 機(jī)電工程環(huán)保實(shí)踐考核及試題及答案
- 行政組織理論與經(jīng)濟(jì)聯(lián)系的試題及答案
- 數(shù)據(jù)庫使用技巧試題及答案分享
- 了解嵌入式系統(tǒng)開發(fā)考試試題及答案要點(diǎn)
- 公路調(diào)流設(shè)計(jì)試題及答案詳解
- 網(wǎng)絡(luò)技術(shù)考試的復(fù)習(xí)內(nèi)容要點(diǎn)試題及答案
- 關(guān)系數(shù)據(jù)庫操作技巧試題及答案
- 數(shù)據(jù)庫考試全面提升技巧試題及答案
- 公共政策中的社會(huì)責(zé)任感構(gòu)建試題及答案
- 吉林省工程竣工驗(yàn)收?qǐng)?bào)告
- 手外傷及斷肢(指)再植(講稿)
- 新版心肺復(fù)蘇流程圖
- DB32/T 4444-2023 單位消防安全管理規(guī)范-高清版
- 初三物理滑輪習(xí)題
- 東南大學(xué)醫(yī)學(xué)三基考試外科選擇題及答案
- (2.1.1)-第2章顎式破碎機(jī)
- GB/T 9724-2007化學(xué)試劑pH值測(cè)定通則
- 拓展訓(xùn)練項(xiàng)目孤島求生游戲規(guī)則與分享參考范本
- DS6-K5B計(jì)算機(jī)聯(lián)鎖演示教學(xué)課件
- 2022年成都信息工程大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)《操作系統(tǒng)》科目期末試卷A(有答案)
評(píng)論
0/150
提交評(píng)論