資源描述:
《第14章 異常處理及跟蹤調(diào)試》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第14章異常處理與跟蹤調(diào)試在程序編制的過程中,總是沒有辦法避免錯(cuò)誤,然而,對(duì)于使用方法引發(fā)的錯(cuò)誤要在程序的執(zhí)行過程中盡可能做出處理,以便使我們說的異常處理;另外,對(duì)于每個(gè)比較大的軟件來說,在程序測(cè)試的過程中往往會(huì)出現(xiàn)錯(cuò)誤,但是,查找錯(cuò)誤的位置要比改正錯(cuò)誤難得多,所以,對(duì)于一個(gè)開發(fā)平臺(tái),C#提供了多種調(diào)試方法。本章簡(jiǎn)單了解異常處理與跟蹤調(diào)試。14.1異常處理在任何情況下,程序都不能是完美無缺,毫無錯(cuò)誤的,所以在程序的編制過程中,程序都必須能處理可能出現(xiàn)的錯(cuò)誤,C#提供處理錯(cuò)誤的機(jī)制,即使用異常類Exception為每種錯(cuò)誤提供定制的處理,并把識(shí)別錯(cuò)誤的代碼和處理錯(cuò)誤的代碼分離開來
2、。C#提供的結(jié)構(gòu)化處理異常的方法,使用try語句提供的控制結(jié)構(gòu)檢測(cè)代碼中的異常并做出相應(yīng)的處理。try語句有三種方式:l用try-catch捕獲異常l用try-finally清除異常l用try-catch-finally處理所有的異常14.1.1try-catch捕獲異常正常情況下,程序流進(jìn)入try控制塊,如果沒有錯(cuò)誤發(fā)生,就會(huì)正常操作。當(dāng)程序流離開try控制塊后,如果沒有發(fā)生錯(cuò)誤,將執(zhí)行catch后的finally語句塊或順序執(zhí)行;當(dāng)執(zhí)行try時(shí)發(fā)生錯(cuò)誤,程序留就會(huì)跳轉(zhuǎn)到相應(yīng)的catch語句塊。如【例14-1】?!纠?4-1】在TextBox控件中接受兩個(gè)數(shù),計(jì)算它們的商。該
3、例中需要從利用TextBox的Text屬性接受數(shù)字,因?yàn)門ext屬性值描述的類型為字符串型,所以在程序運(yùn)行的過程中,可能引發(fā)異常;另外,除數(shù)不能為0,否則,引發(fā)異常。程序的界面設(shè)置如圖14-1。圖14-1界面設(shè)計(jì)圖14-2由a引發(fā)的異?!坝?jì)算a/b”的代碼如下:7privatevoidbutton1_Click(objectsender,System.EventArgse){inta=1,b=1,c=1;try{a=Convert.ToInt32(textBox1.Text);}catch{MessageBox.Show("請(qǐng)將a的值輸入為數(shù)字");return;}try{b=
4、Convert.ToInt32(textBox2.Text);}catch{MessageBox.Show("請(qǐng)將b的值輸入為數(shù)字");return;}try{c=a/b;}catch(DivideByZeroException){MessageBox.Show("除數(shù)不能為0");return;}MessageBox.Show("整數(shù)a與整數(shù)b的商為"+c.ToString());}圖14-3由b引發(fā)的異常圖14-4除數(shù)為0的異常圖14-5正常情況程序的運(yùn)行結(jié)果:①當(dāng)在textBox1中輸入不是數(shù)字時(shí),入圖14-3,引發(fā)下面的異常:catch{MessageBox.Show(
5、"請(qǐng)將a的值輸入為數(shù)字");return;}②當(dāng)在textBox2中輸入不是數(shù)字時(shí),入圖14-4,引發(fā)下面的異常:catch{MessageBox.Show("請(qǐng)將b的值輸入為數(shù)字");return;}7③當(dāng)在textBox2中輸入數(shù)據(jù)為0時(shí),將引發(fā)除數(shù)不能為0的異常,如圖14-4。④正常情況下,結(jié)果為兩個(gè)數(shù)相除得到的整數(shù),如圖14-5所示。14.1.2try-finally清除異常如果你關(guān)心清除異常而不是錯(cuò)誤處理,try-finally清除異常能幫助你實(shí)現(xiàn)。它不僅抑制了出錯(cuò)消息,而且所有包含在finally塊中的代碼在異常被引發(fā)后仍然會(huì)被執(zhí)行。盡管程序不正常終止,但你還可以為
6、用戶獲取一條消息,如【例14-2】【例14-2】檢查文件是否存在,退出時(shí)顯示“謝謝您使用本軟件”。本例中檢查文件的存在與否,使用try-finally清除異常實(shí)現(xiàn)消息的顯示。當(dāng)文件存在時(shí)運(yùn)行結(jié)果如圖14-6所示;當(dāng)文件不存在時(shí)運(yùn)行結(jié)果如圖14-7所示。代碼如下:privatevoidbutton1_Click(objectsender,System.EventArgse){try{if(File.Exists(textBox1.Text)){label2.Text="該文件存在";}elselabel2.Text="該文件不存在";}finally{MessageBox.Sho
7、w("謝謝您使用本軟件!");};}圖14-6文件存在圖14-7文件不存在14.1.3用try-catch-finally處理所有的異常應(yīng)用程序最有可能的途徑是合并前面兩種錯(cuò)誤處理技術(shù)——捕獲錯(cuò)誤、清除并繼續(xù)執(zhí)行應(yīng)用程序。所有你要做的是在出錯(cuò)處理代碼中使用try-catch-finally語句。如將【例14-3】?!纠?4-3】在【例14-1】的基礎(chǔ)上,將a或b引發(fā)異常的情況合并,無論怎樣發(fā)生異常,程序?qū)⒏臑橄旅娴拇a:privatevoidbutton1_Click(objectsende