




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章程序調(diào)試與異常處理
1.總體要求了解程序錯(cuò)誤的3種類(lèi)型。熟練運(yùn)用VisualStudio.Net2010的調(diào)試器調(diào)試程序錯(cuò)誤。解異常和異常處理的概念。學(xué)會(huì)使用try-catch-finally及throw語(yǔ)句來(lái)捕獲和處理異常。2.學(xué)習(xí)重點(diǎn)調(diào)試程序錯(cuò)誤的方法。y-catch-finally結(jié)構(gòu)及其使用方法。第七章程序調(diào)試與異常處理主要內(nèi)容7.1程序錯(cuò)誤7.2程序的異常處理7.1程序錯(cuò)誤7.1.1程序錯(cuò)誤分類(lèi)7.1.2調(diào)試程序錯(cuò)誤
返回7.1.1程序錯(cuò)誤分類(lèi)在編寫(xiě)程序時(shí),我們經(jīng)常會(huì)遇到各種各樣的錯(cuò)誤,這些錯(cuò)誤中有些容易發(fā)現(xiàn)和解決,有些則比較隱蔽甚至很難發(fā)現(xiàn)。C#程序錯(cuò)誤總體上可以歸納為3類(lèi):語(yǔ)法錯(cuò)誤、邏輯錯(cuò)誤和運(yùn)行時(shí)錯(cuò)誤。1.語(yǔ)法錯(cuò)誤語(yǔ)法錯(cuò)誤是指不符合C#語(yǔ)法規(guī)則的程序錯(cuò)誤。例如,變量名的拼寫(xiě)錯(cuò)誤、數(shù)據(jù)類(lèi)型錯(cuò)誤、標(biāo)點(diǎn)符號(hào)的丟失、括號(hào)不匹配等。語(yǔ)法錯(cuò)誤是3類(lèi)程序錯(cuò)誤中最容易發(fā)現(xiàn)也是最容易解決的一類(lèi)錯(cuò)誤,發(fā)生在源代碼的編寫(xiě)過(guò)程中。在VisualStudio.Net2010中,源代碼編輯器能自動(dòng)識(shí)別語(yǔ)法錯(cuò)誤,并用紅色波浪線標(biāo)記錯(cuò)誤。只要將鼠標(biāo)停留在帶有此標(biāo)記的代碼上,就會(huì)顯示出其錯(cuò)誤信息,同時(shí)顯示在錯(cuò)誤列表窗口中。7.1.1程序錯(cuò)誤分類(lèi)如圖7-1所示,語(yǔ)句應(yīng)該以英文分號(hào)結(jié)尾,而不是以中文分號(hào)結(jié)尾。7.1.1程序錯(cuò)誤分類(lèi)其實(shí),語(yǔ)法錯(cuò)誤是可以避免的。VisualStudio.Net2010提供了強(qiáng)大的智能感知技術(shù),要盡量利用該技術(shù)輔助書(shū)寫(xiě)源程序,不但可提高錄入速度,還可以避免語(yǔ)法錯(cuò)誤。如圖7-2所示,當(dāng)輸入了“Convert.”時(shí),系統(tǒng)會(huì)自動(dòng)顯示Convert類(lèi)的所有成員方法,通過(guò)光標(biāo)移動(dòng)鍵查找并定位于某個(gè)方法,按空格鍵,即可完成相關(guān)諸如“Convert.ToDateTime”之類(lèi)的錄入操作。7.1.1程序錯(cuò)誤分類(lèi)2.邏輯錯(cuò)誤邏輯錯(cuò)誤通常不會(huì)引起程序本身的運(yùn)行異常。因?yàn)榉治龊驮O(shè)計(jì)不充分,造成程序算法有缺陷或完全錯(cuò)誤,這樣根據(jù)錯(cuò)誤的算法書(shū)寫(xiě)程序,自然不會(huì)獲得預(yù)期的運(yùn)行結(jié)果。因此邏輯錯(cuò)誤的實(shí)質(zhì)是算法錯(cuò)誤,是最不容易發(fā)現(xiàn)的,也是最難解決的,必須重新檢查程序的流程是否正確以及算法是否與要求相符,有時(shí)可能需要逐步地調(diào)試分析,甚至還要適當(dāng)?shù)靥砑訉?zhuān)門(mén)的調(diào)試分析代碼來(lái)查找其出錯(cuò)的原因和位置。邏輯錯(cuò)誤無(wú)法依靠.NET編譯器進(jìn)行檢查,只有依靠程序設(shè)計(jì)員認(rèn)真、不懈的努力才能解決。正因如此,尋找新算法、排除邏輯錯(cuò)誤才是廣大程序設(shè)計(jì)員的價(jià)值所在。7.1.1程序錯(cuò)誤分類(lèi)3.運(yùn)行時(shí)錯(cuò)誤運(yùn)行時(shí)錯(cuò)誤是指在應(yīng)用程序試圖執(zhí)行系統(tǒng)無(wú)法執(zhí)行的操作時(shí)產(chǎn)生的錯(cuò)誤,也就是我們所說(shuō)的系統(tǒng)報(bào)錯(cuò)。這類(lèi)錯(cuò)誤編譯器是無(wú)法自動(dòng)檢查出來(lái)的,通常需要對(duì)輸入的代碼進(jìn)行手動(dòng)檢查并更正?!緦?shí)例7-1】設(shè)計(jì)一個(gè)Windows程序,求每隔3個(gè)位置上的2個(gè)數(shù)組元素之和,并保存在前一元素中7.1.2調(diào)試程序錯(cuò)誤1.VisualStudio.Net2010的調(diào)試方式VisualStudio.Net2010提供多種調(diào)試方式,包括逐語(yǔ)句方式、逐過(guò)程方式和斷點(diǎn)方式等。其中,逐語(yǔ)句方式和逐過(guò)程方式都是逐行執(zhí)行程序代碼,所不同的是,當(dāng)遇到方法調(diào)用時(shí),前者將進(jìn)入方法體內(nèi)繼續(xù)逐行執(zhí)行,而后者不會(huì)進(jìn)入方法體內(nèi)跟蹤方法本身的代碼。所以如果在調(diào)試的過(guò)程中想避免執(zhí)行方法體內(nèi)的代碼,就可以使用逐過(guò)程方式;相反,如果想查看方法體代碼是否出錯(cuò),就得使用逐語(yǔ)句方式。在VisualStudio.Net2010中,選擇“調(diào)試”菜單的“逐語(yǔ)句”命令(如圖7-4所示)或者按<F11>,可啟用逐語(yǔ)句方式,連續(xù)按<F11>可跟蹤每一條語(yǔ)句的執(zhí)行。而選擇“調(diào)試”菜單的“逐過(guò)程”命令或者按<F10>,可啟用逐過(guò)程方式。7.1.2調(diào)試程序錯(cuò)誤2.VisualStudio.Net2010的斷點(diǎn)方式通過(guò)逐行執(zhí)行程序來(lái)尋找錯(cuò)誤,效果確實(shí)很棒。但是,對(duì)于較大規(guī)模的程序或者已經(jīng)知道錯(cuò)誤范圍的程序,使用逐語(yǔ)句方式或逐過(guò)程方式,都是沒(méi)有必要的。為此,可使用斷點(diǎn)方式調(diào)試程序。斷點(diǎn)是一個(gè)標(biāo)志,它通知調(diào)試器應(yīng)該在某處中斷應(yīng)用程序并暫停執(zhí)行。與逐行執(zhí)行不同的是,斷點(diǎn)方式可以讓程序一直執(zhí)行,直到遇到斷點(diǎn)才開(kāi)始調(diào)試。顯然,這將大大加快調(diào)試過(guò)程。VisualStudio.Net2010允許在源程序中設(shè)置多個(gè)斷點(diǎn)。7.1.2調(diào)試程序錯(cuò)誤設(shè)置斷點(diǎn)的操作方法如下:右擊想要設(shè)置斷點(diǎn)的代碼行,選擇“斷點(diǎn)→插入斷點(diǎn)”命令即可;也可以單擊源代碼行左邊的灰色區(qū)域;或者將插入點(diǎn)定位于想以設(shè)置斷點(diǎn)的代碼行,再按<F9>。如圖7-6所示,斷點(diǎn)以紅色圓點(diǎn)表示,并且該行代碼也高亮顯示。7.1.2調(diào)試程序錯(cuò)誤3.人工尋找邏輯錯(cuò)誤在眾多的程序錯(cuò)誤中,有些錯(cuò)誤是很難發(fā)現(xiàn)的,尤其是邏輯錯(cuò)誤,即便是功能強(qiáng)大的調(diào)試器也顯得無(wú)能為力。這時(shí)可以適當(dāng)?shù)丶尤胍恍┤斯げ僮?,以便快速地找到錯(cuò)誤。常見(jiàn)的方法有兩種:(1)注釋可能出錯(cuò)的代碼。這是一種比較有效的尋找錯(cuò)誤的策略。如果注釋掉部分代碼后,程序就能正常運(yùn)行,那么就能肯定該代碼出錯(cuò)了;反之,錯(cuò)誤應(yīng)該在別處。(2)適當(dāng)?shù)靥砑右恍┹敵稣Z(yǔ)句,再觀察是否成功顯示輸出信息,即可判斷包含該輸出語(yǔ)句的分支和循環(huán)結(jié)構(gòu)是否有邏輯錯(cuò)誤,從而進(jìn)一步分析錯(cuò)誤的原因。7.2程序的異常處理7.2.1異常的概念7.2.2try-catch語(yǔ)句與異常處理7.2.3finally語(yǔ)句7.2.4throw語(yǔ)句與拋出異常返回7.2.1異常的概念一個(gè)優(yōu)秀的程序員在編寫(xiě)程序時(shí),不僅要關(guān)心代碼正常的控制流程,同時(shí)也要把握好系統(tǒng)可能隨時(shí)發(fā)生的不可預(yù)期的事件。它們可能來(lái)自系統(tǒng)本身,如內(nèi)存不夠、磁盤(pán)出錯(cuò)、網(wǎng)絡(luò)連接中斷、數(shù)據(jù)庫(kù)無(wú)法使用等;也可能來(lái)自用戶,如非法輸入等,一旦發(fā)生這些事件,程序都將無(wú)法正常運(yùn)行。所謂異常就是那些能影響程序正常執(zhí)行的事件,而對(duì)這些事件的處理方法稱(chēng)為異常處理。異常處理是必不可少的,它可以防止程序處于非正常狀態(tài),并可根據(jù)不同類(lèi)型的錯(cuò)誤來(lái)執(zhí)行不同的處理方法。7.2.1異常的概念【實(shí)例7-2】設(shè)計(jì)一個(gè)Windows程序,首先,使用TextBox控件構(gòu)建單價(jià)和數(shù)量的操作界面,然后編程計(jì)算金額。在本例中,造成異常的原因是:TextBox控件本身不具備限制用戶輸入的功能,設(shè)計(jì)人員又按常規(guī)進(jìn)行設(shè)計(jì),但當(dāng)用戶不按常規(guī)輸入數(shù)據(jù)時(shí),系統(tǒng)自然發(fā)生異常。所以,如果不想讓程序因出現(xiàn)異常而被系統(tǒng)中斷或退出的話,必須構(gòu)建相應(yīng)的異常處理機(jī)制。7.2.2try-catch語(yǔ)句與異常處理
在開(kāi)發(fā)應(yīng)用程序的過(guò)程中,可以假定任何代碼塊都有可能引發(fā)異常,特別是CLR本身可能引發(fā)的異常,例如溢出、數(shù)組越界、除數(shù)為0等。為了能夠?qū)Ξ惓S行幚?,C#的提供了try-catch語(yǔ)句,其格式一般如下:try{
語(yǔ)句塊1//可能引發(fā)異常的代碼}cacth(異常對(duì)象)//捕獲異常類(lèi)對(duì)象{
語(yǔ)句塊2//實(shí)現(xiàn)異常處理}7.2.2try-catch語(yǔ)句與異常處理try-catch語(yǔ)句的邏輯含義為:先試著執(zhí)行可能引發(fā)異常的“語(yǔ)句塊1”,如果發(fā)生異常,則由系統(tǒng)自動(dòng)捕獲并將相關(guān)信息封裝保存到“異常對(duì)象”之中,然后執(zhí)行“語(yǔ)句塊2”,實(shí)現(xiàn)異常處理;如果未發(fā)生異常,則跳過(guò)catch子句,繼續(xù)執(zhí)行try-catch之后的語(yǔ)句7.2.2try-catch語(yǔ)句與異常處理【實(shí)例7-3】修改實(shí)例7-2,添加異常處理功能。7.2.2try-catch語(yǔ)句與異常處理使用try-catch語(yǔ)句時(shí),特別要注意以下兩點(diǎn):(1)catch子語(yǔ)中的異常對(duì)象可以省略。如果省略異常對(duì)象,則默認(rèn)為CLR的異常類(lèi)對(duì)象,否則為指定的異常類(lèi)的對(duì)象。(2)由于try子句中代碼有可能引發(fā)不只一種異常,因此C#允許針對(duì)不同的異常,定義多個(gè)不同的cacth子句。當(dāng)try子句拋出異常時(shí),系統(tǒng)將根據(jù)異常類(lèi)型順序查找并執(zhí)行對(duì)應(yīng)的catch子句,實(shí)現(xiàn)特定異常處理。7.2.3finally語(yǔ)句在try-catch語(yǔ)句中,只有捕獲到了異常,才會(huì)執(zhí)行cacth子句中的代碼。但還有一些比較特殊的操作,比如文件的關(guān)閉、網(wǎng)絡(luò)連接的斷開(kāi)以及數(shù)據(jù)庫(kù)操作中鎖的釋放等,應(yīng)該是無(wú)論是否發(fā)生異常都必須執(zhí)行,否則會(huì)造成系統(tǒng)資源的占用和不必要的浪費(fèi)。類(lèi)似這些無(wú)論是否捕捉到異常都必須執(zhí)行的代碼,可用finally關(guān)鍵字定義。7.2.3finally語(yǔ)句finally語(yǔ)句常常與try-cacth語(yǔ)句搭配使用,其完整格式:
try
{
語(yǔ)句塊1//可能引發(fā)異常的代碼
}
cacth(異常對(duì)象)//捕獲異常類(lèi)對(duì)象
{
語(yǔ)句塊2//實(shí)現(xiàn)異常處理
}
finally
{
語(yǔ)句塊3//無(wú)論是否異常,都作最后處理
}7.2.3finally語(yǔ)句【實(shí)例7-4】設(shè)計(jì)一個(gè)Windows應(yīng)用程序,實(shí)現(xiàn)用于捕獲創(chuàng)建新文件時(shí)因該文件已經(jīng)存在而引發(fā)的異常,并且最后無(wú)論是否捕獲到異常都要關(guān)閉文件。7.2.4throw語(yǔ)句與拋出異常前面所捕獲到的異常,都是當(dāng)遇到錯(cuò)誤時(shí),系統(tǒng)自己報(bào)錯(cuò),自動(dòng)通知運(yùn)行環(huán)境異常的發(fā)生。但是有時(shí)還可以在代碼中手動(dòng)地告知運(yùn)行環(huán)境在什么時(shí)候發(fā)生了什么異常。C#提供的throw語(yǔ)句可手動(dòng)拋出一個(gè)異常,使用格式如下:throw[異常對(duì)象]//提供有關(guān)拋出的異常信息當(dāng)省略異常對(duì)象時(shí),該語(yǔ)句只能用在catch語(yǔ)句中,用于再次引發(fā)異常處理。當(dāng)throw語(yǔ)句帶有異常對(duì)象時(shí),則拋出指定的異常類(lèi),并顯示異常的相關(guān)信息。該異常既可以是預(yù)定義的異常類(lèi),也可以是自定義的異常類(lèi)。7.2.4throw語(yǔ)句與拋出異常在同一個(gè)try-catch語(yǔ)句中可以使用一個(gè)以上的特定catch
子句。這種情況下catch
子句的順序很重要,因?yàn)闀?huì)按順序檢查catch
子句。將先捕獲特定程度較高的異常,而不是特定程度較小的異常。在catch
塊中可以使用throw語(yǔ)句再次引發(fā)已由catch
語(yǔ)句捕獲的異常。例如:
catch(InvalidCastExceptione){throw(e);//Rethrowingexceptione}7.2.4throw語(yǔ)句與拋出異常如
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)間租賃辦公場(chǎng)地協(xié)議
- 健康體檢預(yù)約與服務(wù)協(xié)議
- 汽車(chē)應(yīng)急燈行業(yè)相關(guān)投資計(jì)劃提議范本
- 代理公司記賬協(xié)議書(shū)
- 農(nóng)村畜牧養(yǎng)殖技術(shù)支持合作合同
- 簡(jiǎn)述治愈的根本任務(wù)和主要內(nèi)容
- 行政管理學(xué)案例分析
- 特種加工機(jī)床相關(guān)項(xiàng)目投資計(jì)劃書(shū)范本
- 體育賽事組織與策劃實(shí)施計(jì)劃
- 電壓力煲相關(guān)項(xiàng)目投資計(jì)劃書(shū)范本
- 森林區(qū)劃(森林資源經(jīng)營(yíng)管理)
- 壓力管道使用登記工作程序
- 心房顫動(dòng)診斷和治療中國(guó)指南2023精解
- 水利工程運(yùn)維水利工程運(yùn)行和日常維修養(yǎng)護(hù)方案
- 密碼學(xué)基礎(chǔ)完整版本
- 2015年玻璃幕墻工程質(zhì)量檢驗(yàn)標(biāo)準(zhǔn)
- 2024年貴州蔬菜集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 國(guó)際貿(mào)易(對(duì)外經(jīng)濟(jì)貿(mào)易大學(xué))智慧樹(shù)知到期末考試答案2024年
- 高級(jí)審計(jì)師《審計(jì)理論與審計(jì)案例分析》真題
- 營(yíng)養(yǎng)健康食堂建設(shè)指南
- 酒店公共區(qū)域電梯安全使用培訓(xùn)
評(píng)論
0/150
提交評(píng)論