《新編Visual-Basic程序設(shè)計教程》第15章_第1頁
《新編Visual-Basic程序設(shè)計教程》第15章_第2頁
《新編Visual-Basic程序設(shè)計教程》第15章_第3頁
《新編Visual-Basic程序設(shè)計教程》第15章_第4頁
《新編Visual-Basic程序設(shè)計教程》第15章_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第15章程序調(diào)試*錯誤分類VB中的中斷模式調(diào)試工具調(diào)試窗口錯誤捕獲15.1錯誤分類VB中常見的錯誤可分為三種類別:即編譯錯誤、運行錯誤和邏輯錯誤。15.1.1編譯錯誤編譯錯誤是由于在程序中輸入了不正確的代碼而并產(chǎn)生的,包括語法錯誤和結(jié)構(gòu)錯誤。如輸入了不正確的關(guān)鍵字、缺少標點符號或語句前后不配套等,都會在編譯程序時被系統(tǒng)檢測到??梢宰孷B對語法錯誤進行語法檢查,設(shè)置方法是:選擇“工具”→“選項”→“編輯器”選項卡,選定“自動語檢測”,以后用戶在代碼窗口中輸入的語句中有語法錯誤時,VB即以紅色標示錯誤的語句并用對話框給予提示。15.1.2運行錯誤應(yīng)用程序在VB環(huán)境下運行,當語句執(zhí)行無效操作時,就會產(chǎn)生運行錯誤,例如數(shù)據(jù)類型不匹配、試圖打開一個并不存在的文件、除數(shù)是0等都會產(chǎn)生運行錯誤。運行錯誤具有隱蔽性,如果帶有運行錯誤的語句因條件表達式不滿足而在程序運行時未被執(zhí)行到,則該錯誤就難以被發(fā)現(xiàn)。15.1.3邏輯錯誤邏輯錯誤的出現(xiàn)是由程序員考慮不周造成的。當應(yīng)用程序未按預期的方式執(zhí)行從而得到預期結(jié)果時,就表示可能有一個或多個邏輯錯誤。在這種情況下,應(yīng)用程序的代碼完全符合VB的語法要求,在運行時也未執(zhí)行無效的操作,故系統(tǒng)不會報告出錯信息,甚至還會給出一個很接近于正確值的結(jié)果。如果一個程序的運行結(jié)果有錯,則程序中必定隱藏著邏輯錯誤,因此程序編寫完畢應(yīng)使用一些數(shù)據(jù)對程序作測試以期發(fā)現(xiàn)其中的錯誤。程序的可讀性、程序員的編程經(jīng)驗、程序的結(jié)構(gòu)化是否良好、測試工具的使用等,對發(fā)現(xiàn)、糾正程序中的邏輯錯誤起著決定性的作用。15.2VB中的中斷模式為了正確有效地對程序進行調(diào)試,首先必須弄清VB應(yīng)用程序的三種工作模式,以及在哪種模式下可進行代碼調(diào)試工作。15.2.1VB中的三種工作模式VB有三種工作模式,即設(shè)計模式、運行模式及中斷模式。他們的特性如下表所示。模式功能描述設(shè)計模式大多數(shù)應(yīng)用程序的創(chuàng)建工作都是在設(shè)計模式下完成的。在這種模式下可設(shè)計圖形用戶界面、編寫程序代碼、查看和設(shè)置屬性等,此時可設(shè)置斷點、創(chuàng)建監(jiān)視表達式,但不能使用調(diào)試工具運行模式在VB環(huán)境下運行應(yīng)用程序時,系統(tǒng)即進入運行模式。當程序有錯誤時,系統(tǒng)自動轉(zhuǎn)入中斷模式中斷模式當選擇“運行”菜單下的“中斷”命令,或按下Ctrl+Break時可切換到中斷模式,此時進入調(diào)試狀態(tài),可使用各種調(diào)試工具VB的三種工作模式從表中可以看出,只有在VB的中斷模式下才能進行代碼的調(diào)試工作。15.2.2進入中斷模式進入中斷模式的方法很多,主要有以下幾種:1.通過設(shè)置斷點進入中斷模式。2.按Ctrl+Break鍵進入中斷模式。3.單擊工具欄上的中斷按鈕進入中斷模式。4.執(zhí)行“運行”菜單下的“中斷”命令進入中斷模式。5.執(zhí)行到Stop語句進入中斷模式。6.產(chǎn)生了非俘獲的運行錯誤時進入中斷模式。7.“添加監(jiān)視”對話框中設(shè)置的中斷表達式滿足條件時進入中斷模式。8.語句運行出錯時進入中斷模式。當系統(tǒng)進入中斷模式后,便可以運用系統(tǒng)提供的調(diào)試工具,查找程序出錯的原因。15.3調(diào)試工具調(diào)試是尋找和排除錯誤的過程。有些錯誤可能只需要幾分鐘就可查找出來,而另外一些隱藏得較深的錯誤則可能要花費幾個小時,甚至幾天的時間,對于這一類錯誤,VB提供了一套交互式的調(diào)試工具,專門幫助程序員查找錯誤,特別是邏輯錯誤。要顯示調(diào)試工具欄,可在VB工具欄上單擊鼠標右鍵并選定“調(diào)試”選項,隨即打開如下圖所示的工具欄。調(diào)試工具欄下表顯示了主要調(diào)試工具的用途和對應(yīng)的熱鍵。調(diào)試工具用途熱鍵中斷(暫停)中斷當前程序的運行,進入中斷模式Ctrl+Break運行開始執(zhí)行當前工程F5中止終止當前程序的運行斷點在代碼上設(shè)置斷點,當程序運行到這一行時進入中斷模式F9跟蹤在中斷模式下一次執(zhí)行一行代碼F8單步在中斷模式下一次執(zhí)行一行代碼,但不不進入過程內(nèi)部。即任何過程都被看作是一條代碼,一次執(zhí)行完畢,并停在過程調(diào)用語句的下一條語句Shift+F8跳出在中斷模式下執(zhí)行當前過程剩下的所有代碼,并停在過程調(diào)用語句的下一條語句Ctrl+Shift+F8本地窗口本地窗口,用以顯示局部變量的當前值監(jiān)視窗口用以顯示指定變量的或表達式的值立即窗口可在此窗口中輸入并執(zhí)行一行代碼,或者查看變量值調(diào)試工具表下面的示例說明了其中幾個工具的具體使用方法。新建一個標準工程,在表單上添加一個命令按鈕和兩個文本框,并將文本框的Text屬性設(shè)為空,如下圖所示。調(diào)試工具示例雙擊命令按鈕進入代碼窗口,輸入以下代碼:選擇“工具”菜單下的“添加過程”命令,在彈出的對話框中輸入過程名,并將過程類型設(shè)為Private(私有的)。單擊“確定”返回代碼窗口,在Test過程中輸入以下代碼:PrivateSubCommand1_Click()MsgBox("Thisisatestfordebug!!") '利用輸出對話框輸出信息Test'調(diào)用測試過程Command1.Caption="測試結(jié)束"'改變命令按鈕的標題EndSubPrivateSubTest()Command1.Caption="測試"Text1.Text="Thisisatestfordebug" '顯示在文本框1中的信息Text2.Text="Doyouunderstand?" '顯示在文本框2中的信息StopEndSub代碼輸入結(jié)束后,就可打開調(diào)試工具欄,測試下面幾個調(diào)試工具的用途了。1.運行:單擊工具欄上的運行按鈕或直接按下F5鍵執(zhí)行程序。當程序運行到“Stop”時,將會顯示出程序代碼,并停在以黃底色顯示的“Stop”上。想接著運行該程序時,可以按下F5鍵。調(diào)試結(jié)束后可將“Stop”語句刪除。2.中止:單擊工具欄上的中止按鈕結(jié)束程序的運行。3.斷點:在Text1.Text="Thisisatestfordebug"這一句上設(shè)置點,然后單擊運行按鈕執(zhí)行程序,觀察在斷點處程序的招待情況。4.跟蹤:單擊工具欄上跟蹤按鈕或按F8鍵開始執(zhí)行程序,每次執(zhí)行一行。5.單步:按Shift+F8或單擊工具欄上單步按鈕執(zhí)行程序。執(zhí)行到Test命令行時并不進入Test過程單步運行,而是一次執(zhí)行完Test中所有代碼,并停在Command1.Caption="測試結(jié)束"行。6.跳出:先按F8鍵單步執(zhí)行程序,當運行到Text1.Text="Thisisatestfordebug"時,按下Ctrl+Shift+F8,仔細觀察運行情況,可發(fā)現(xiàn)它一次性執(zhí)行完過程中所有剩余代碼,并停在Command1.Caption="測試結(jié)束"行上。15.4調(diào)試窗口在調(diào)試過程中經(jīng)常要分析數(shù)據(jù)的變化,如監(jiān)視變量和表達式的值等,這些工作就是借助調(diào)試窗口完成的。VB提供了三個調(diào)試窗口,即立即窗口、監(jiān)視窗口和本地窗口。15.4.1本地窗口單擊“視圖”菜單下的“本地窗口”命令可打開本地窗口,如下圖所示。它用于顯示當前過程中的所有變量值。當程序運行時從一個過程切換到另一個過程,本地窗口中的內(nèi)容也相應(yīng)發(fā)生變化。本地窗口例15.1

新建一個標準工程,在表單中添加兩個命令按鈕Command1和Command2,雙擊Command1(或Command2)進入代碼窗口,輸入如下代碼:PrivateSubCommand1_Click()DimiAsInteger'定義i,j為整型DimjAsIntegerForj=1To3'For、Next循環(huán)i=j+2proceli,jNextjEndSubPrivateSubCommand2_Click()UnloadMe'關(guān)閉窗口,退出程序EndSubPrivateSubprocel(c1,c2AsInteger)DimkAsIntegerk=c1*c2Command1.Caption="k="&kEndSub正確輸入以上程序,打開本地窗口。按F8鍵進入單步執(zhí)行狀態(tài),單擊Command1按鈕后,代碼窗口被打開,并以黃底色標示當前執(zhí)行到的語句,同時可以看到本地窗口中顯示出變量的初始信息,如下圖所示。變量的初始值反復按F8鍵單步執(zhí)行程序,會看到變量的值隨著程序的執(zhí)行而發(fā)生變化。而當程序進入procel過程后,本地窗口中的內(nèi)容發(fā)生了改變,不再顯示變量i、j的值,而是顯示變量c1、c2和k的值,如下圖所示,從而使用戶能夠逐步了解程序運行中變量的每一次變化。進入procel過程后15.4.2立即窗口在本書第4章學習內(nèi)部函數(shù)時已經(jīng)提到了“立即窗口”,但那時并沒有對其進行詳細介紹,下面就讓來詳細學習“立即窗口”的使用。單擊“視圖”菜單下的“立即窗口”命令可打開立即窗口,如下圖所示。它用于顯示程序調(diào)試時產(chǎn)生的信息,也可以執(zhí)行一行代碼。立即窗口1.在立即窗口中顯示信息在立即窗口中顯示信息的方法有兩種,其特點如下。⑴利用Debug.Print語句顯示信息。該語句既可以寫在應(yīng)用程序代碼中,也可以寫在立即窗口內(nèi)。例如,在程序中輸入

這樣在調(diào)試程序過程中執(zhí)行到該語句時就可在立即窗口中顯示sum的值。⑵直接在立即窗口中輸入Print或?來顯示信息例如,在中斷狀態(tài)下查看文本框內(nèi)容可直接在立即窗口中輸入:

回車后,立即窗口中將顯示文本框中的信息內(nèi)容。Debug.Print"sum=";sumPrintText1.text?Text1.text2.在立即窗口中執(zhí)行代碼立即窗口除了可以顯示信息外,還可鍵入并執(zhí)行一行代碼。在中斷模式下,在立即窗口中輸入并執(zhí)行一行代碼的效果與執(zhí)行代碼窗口中相同代碼的效果完全一樣,但立即窗口只能對任何有效的VB可執(zhí)行語句求值或調(diào)用過程和函數(shù),并不接受數(shù)據(jù)聲明。例15.2

在立即窗口中重復運行某個過程以測試它在不同條件下的運行結(jié)果。打開一個新的標準工程,把下列代碼添加到窗體模塊中。PrivateSubForm_Click()procel'執(zhí)行過程procelEndSubSubprocel()DimintxAsIntegerDimintyAsIntegerintx=10inty=intx+5MsgBox("Procedureisend")EndSub首先將光標移至MsgBox("Procedureisend")語句上任意處并單擊調(diào)試工具欄上的

按鈕,該語句便被設(shè)置為一個斷點(再次在同一語句上單擊斷點設(shè)置時便被取消),然后運行程序。單擊窗體后,程序在斷點處進入中斷模式。單擊立即窗口,在其中輸入回車后在立即窗口中便顯示出15。單擊代碼窗口,將過程中“intx=10”改為“intx=20”,回到立即窗口,先在其中輸入“procel”,即執(zhí)行該過程,然后再次輸入“?inty”來顯示inty的值,此時顯示的值為25。顯示情況如下圖所示。

?inty立即窗口應(yīng)用例3.在立即窗口中顯示錯誤信息利用立即窗口可顯示與特定錯誤號相聯(lián)系的錯誤信息。例如,在立即窗口中輸入語句:回車后,相應(yīng)的錯誤信息就會出現(xiàn)在立即窗口中,如下圖所示。 error58在立即窗口中顯示錯誤信息15.4.3監(jiān)視窗口監(jiān)視窗口用于顯示當前的監(jiān)視表達式。當應(yīng)用程序進入中斷模式后,監(jiān)視表達式會出現(xiàn)在監(jiān)視窗口中,以供用戶觀察他們的值。用打開立即窗口的方式同樣可以打開監(jiān)視窗口。1.添加監(jiān)視表達式在設(shè)計或調(diào)試程序時都可以在監(jiān)視對話框中添加監(jiān)視表達式,VB會自動對監(jiān)視表達式進行監(jiān)視。添加監(jiān)視的對話框如下圖所示。添加監(jiān)視對話框其各設(shè)置項的意義如下:(1)“表達式”框:用于輸入要監(jiān)視的表達式,表達式可以是一個變量、屬性函數(shù)調(diào)用或其他任何有效的表達式。(2)“上下文”選項組:用來設(shè)置表達式中要監(jiān)視的變量的范圍。當有名字相同而范圍不同的變量時使用該選項組。例如,應(yīng)用程序中有兩個過程都包含名為IntX的變量時,便可設(shè)置不同范圍以區(qū)分要觀察的是哪一個IntX變量。利用“上下文”選項組還可把監(jiān)視表達式中變量的范圍限制在特定過程、特定窗體或特定模塊中,也可通過選定“所有過程及所有模塊”使范圍可用于整個應(yīng)用程序。VB在小范圍內(nèi)可更快地計算變量。(3)“監(jiān)視類型”選項組:用來設(shè)置VB對監(jiān)視表達式作響應(yīng)的方式,它有如下三個選項:監(jiān)視表達式:VB在應(yīng)用程序進入中斷模式后對表達式進行監(jiān)視并顯示其值。當監(jiān)視值為真時中斷:在表達式的值為真(非零)時,應(yīng)用程序自動進入中斷模式。當監(jiān)視值改變時中斷:每當表達式的值發(fā)生改變時,應(yīng)用程序自動進入中斷模式。在調(diào)試程序時設(shè)置監(jiān)視類型在某些時候相當方便,可大大加快程序調(diào)試的速度。例如,可利用一個監(jiān)視表達式使循環(huán)計數(shù)器達到某個特定值時讓應(yīng)用程序進入中斷模式,而不需要人為地一次一條語句逐步執(zhí)行數(shù)十次乃至數(shù)百次循環(huán)。例15.3

從1到100求和。代碼如下:PrivateSubCommand1_Click()Dimsum,iAsIntegersum=0Fori=1To100sum=sum+iNextiPrint"sum=";sumEndSub若在調(diào)試時想查看當i=99時的取值情況,就可以利用監(jiān)視表達式。打開監(jiān)視窗口,添加兩個監(jiān)視,它們的設(shè)置情況如下表所示。表達式過程模塊監(jiān)視類型監(jiān)視1監(jiān)視2i=99sumCommand1_ClickCommand1_ClickForm1Form1監(jiān)視值為真時中斷監(jiān)視表達式兩個監(jiān)視的設(shè)置情況監(jiān)視對話框示例2.編輯和刪除監(jiān)視表達式需要修改原有的表達式,可用鼠標右鍵單擊監(jiān)視窗口中想要編輯的監(jiān)視表達式,選擇“編輯監(jiān)視”命令,在彈出的編輯監(jiān)視對話框中修改表達式、變量求值范圍或監(jiān)視類型,之后單擊“確定”退出編輯監(jiān)視即可。如果要刪除,則在編輯監(jiān)視對話框中單擊“刪除”按鈕或選中要刪除的表達式后,按Delete鍵即可。按F5鍵運行程序。當循環(huán)執(zhí)行到i=99時,程序進入中斷模式,監(jiān)視窗口中可觀察到sum值為4851,如下圖所示。表達式左側(cè)的圖標標識該表達式的類型。其中

代表監(jiān)視表達式,

表示當監(jiān)視值改變時中斷,而

則表示當監(jiān)視值為真時中斷。15.5錯誤捕獲當運行程序發(fā)生錯誤時,VB一般會顯示消息對話框,給出錯誤提示,并終止程序的運行。對于這樣一類錯誤是可以在程序設(shè)計過程中給予控制的,這種技術(shù)就是“錯誤捕獲”。它可檢測出錯誤,控制程序流向并給出完備的出錯信息,以友好的方式中止程序的運行。15.5.1設(shè)置錯誤陷阱設(shè)置錯誤陷阱有三種方法,如下表所示。語法格式描述OnErrorGoToLine啟動錯誤處理程序。Line參數(shù)可以是任何字符串或秸如果發(fā)生運行時錯誤,則跳到Line指定的行,激活錯誤處理程序。指定的Line和該語句必須在同一過程中,否則會發(fā)生編譯時錯誤而且錯誤處理程序的最后一句必須加上Resume語句返回原調(diào)用處OnErrorResumeNext當發(fā)生錯誤時,跳轉(zhuǎn)到緊接著發(fā)生錯誤的語句之后的語句,并在此繼續(xù)運行OnErrorGoTo0關(guān)閉錯誤處理陷阱,則VB直接處理運行錯誤,而不由錯誤處理代碼來處理設(shè)置錯誤陷阱15.5.2使用Resume恢復程序運行在錯誤處理程序段中處理完錯誤后,必須加上Resume語句返回原調(diào)用處,以恢復程序執(zhí)行。Resume格式如下。如果錯誤和錯誤處理程序出現(xiàn)在同一個過程中,則從產(chǎn)生錯誤的語句恢復運行。如果錯誤出現(xiàn)被調(diào)用的過程中,則從最近一次調(diào)用包含錯誤處理程序的過程的語句處恢復運行。如果錯誤和錯誤處理程序出現(xiàn)在同一個程序中,則從緊隨產(chǎn)生錯誤的語句的下個語句恢復運行。如果錯誤發(fā)生在被調(diào)用的過程中,則對最后一次調(diào)用包含錯誤處理程序的過程的語句(或OnErrorResumeNext語句),從緊隨該語句之后的語句處恢復運行。在line指定處恢復運行。Line參數(shù)是字符串或行號,必須和錯誤處理程序在同一個過程中。ResumeResumeNextResumeline15.5.3獲取錯誤信息當程序運行出錯時,程序可轉(zhuǎn)去執(zhí)行錯誤處理程序。根據(jù)不同的出錯情況提供不同的處理方法,這使

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論