資源描述:
《程序調(diào)試與異常處理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、VisualC#.Net程序設(shè)計(jì)2021/9/151湘潭職業(yè)技術(shù)學(xué)院工學(xué)院第九章程序調(diào)試與異常處理9.1程序錯(cuò)誤9.2程序的異常處理2021/9/152湘潭職業(yè)技術(shù)學(xué)院工學(xué)院9.1程序錯(cuò)誤一、程序錯(cuò)誤分類二、調(diào)試錯(cuò)誤的三種方法2021/9/153湘潭職業(yè)技術(shù)學(xué)院工學(xué)院一、程序錯(cuò)誤分類1.語(yǔ)法錯(cuò)誤它是最容易被發(fā)現(xiàn)和解決的一類錯(cuò)誤,是指在程序設(shè)計(jì)過(guò)程中,出現(xiàn)不符合C#語(yǔ)法規(guī)則的程序代碼。這類錯(cuò)誤在代碼編寫(xiě)期間,VS編輯器都能夠自動(dòng)指出,并會(huì)用波浪線在錯(cuò)誤代碼的下方標(biāo)記出來(lái)。2021/9/154湘潭職業(yè)技術(shù)學(xué)院工學(xué)院2.運(yùn)行時(shí)錯(cuò)誤
2、是指在應(yīng)用程序試圖執(zhí)行系統(tǒng)無(wú)法執(zhí)行的操作時(shí)產(chǎn)生的錯(cuò)誤,即我們通常所說(shuō)的系統(tǒng)報(bào)錯(cuò)。這類錯(cuò)誤編譯器是無(wú)法自動(dòng)檢查出來(lái),通常需要我們對(duì)輸入的代碼進(jìn)行手動(dòng)檢查并更正。3.邏輯錯(cuò)誤常常是由于人為因素,如推理和設(shè)計(jì)算法本身的錯(cuò)誤造成的。這類錯(cuò)誤是最不易發(fā)現(xiàn),同時(shí)也是最難解決的。這類錯(cuò)誤編譯器是無(wú)法檢查,只有通過(guò)開(kāi)發(fā)人員仔細(xì)認(rèn)真的態(tài)度和不懈努力才能解決。2021/9/155湘潭職業(yè)技術(shù)學(xué)院工學(xué)院二、調(diào)試錯(cuò)誤的三種方法1.調(diào)試菜單及工具欄啟動(dòng)調(diào)試全部中斷停止調(diào)試逐語(yǔ)句逐過(guò)程跳出斷點(diǎn)2021/9/156湘潭職業(yè)技術(shù)學(xué)院工學(xué)院2.單步執(zhí)行每執(zhí)行
3、一行代碼,程序就暫停執(zhí)行,直到再次執(zhí)行。這樣可以通過(guò)查看各變量、對(duì)象等的值來(lái)判斷該行代碼是否出錯(cuò)。F10和F11F10:只執(zhí)行調(diào)用函數(shù)的代碼,不會(huì)執(zhí)行函數(shù)本身的代碼。F11:可查看函數(shù)本身代碼是否出錯(cuò)跳出:退出函數(shù)體演示:實(shí)例2021/9/157湘潭職業(yè)技術(shù)學(xué)院工學(xué)院3.設(shè)置斷點(diǎn)斷點(diǎn),是一種信號(hào),通知調(diào)試器應(yīng)該在某處中斷應(yīng)用程序并暫停執(zhí)行。該方法可以讓程序一直執(zhí)行,直到遇到斷點(diǎn),然后開(kāi)始調(diào)試。這大大加快調(diào)試過(guò)程。設(shè)置方法一:?jiǎn)螕粲益I設(shè)置方法二:?jiǎn)螕舢?dāng)前行設(shè)置方法三:按F9鍵2021/9/158湘潭職業(yè)技術(shù)學(xué)院工學(xué)院4.人工尋
4、找邏輯錯(cuò)誤添加注釋:注釋掉可能出錯(cuò)的代碼行添加語(yǔ)句或控件:適當(dāng)?shù)靥砑虞敵稣Z(yǔ)句或類似標(biāo)簽的控件,可獲取更多輔助信息。示例:見(jiàn)教材返回2021/9/159湘潭職業(yè)技術(shù)學(xué)院工學(xué)院9.2程序的異常處理一、異常處理概念二、Try-Catch語(yǔ)句三、Finally語(yǔ)句四、Throw語(yǔ)句2021/9/1510湘潭職業(yè)技術(shù)學(xué)院工學(xué)院一、異常處理概念異常指影響程序正常執(zhí)行的事件。如內(nèi)存不夠、磁盤(pán)出錯(cuò)、用戶非法輸入等。異常處理是指對(duì)異常事件的處理方法,它是一種處理機(jī)制。異常出現(xiàn)后若得以妥善處理,則不會(huì)導(dǎo)致程序終止執(zhí)行。2021/9/1511湘潭
5、職業(yè)技術(shù)學(xué)院工學(xué)院異常具有以下特點(diǎn):各種類型的異常最終都是由System.Exception派生而來(lái)。在可能引發(fā)異常的語(yǔ)句周?chē)褂胻ry塊。一旦try塊中發(fā)生異常,控制流將跳轉(zhuǎn)到第一個(gè)關(guān)聯(lián)的異常處理程序(無(wú)論該處理程序存在于調(diào)用堆棧中的什么位置)。在C#中,catch關(guān)鍵字用于定義異常處理程序。如果給定異常沒(méi)有異常處理程序,則程序?qū)⑼V箞?zhí)行,并顯示一條錯(cuò)誤消息。除非您可以處理某個(gè)異常并使應(yīng)用程序處于已知狀態(tài),否則請(qǐng)不要捕捉該異常。如果捕捉System.Exception,請(qǐng)?jiān)赾atch塊的末尾使用throw關(guān)鍵字再次引發(fā)該異
6、常。2021/9/1512湘潭職業(yè)技術(shù)學(xué)院工學(xué)院異常具有以下特點(diǎn):如果catch塊定義了一個(gè)異常變量,則可以用它獲取有關(guān)所發(fā)生異常類型的更多信息。程序可以使用throw關(guān)鍵字顯式地引發(fā)異常。異常對(duì)象包含有關(guān)錯(cuò)誤的詳細(xì)信息,比如調(diào)用堆棧的狀態(tài)以及有關(guān)錯(cuò)誤的文本說(shuō)明。即使發(fā)生異常也會(huì)執(zhí)行finally塊中的代碼。使用finally塊釋放資源,例如,關(guān)閉在try塊中打開(kāi)的任何流或文件。2021/9/1513湘潭職業(yè)技術(shù)學(xué)院工學(xué)院二、Try-Catch語(yǔ)法格式Try{//可能引發(fā)異常的代碼塊;}Cacth[異常對(duì)象]//捕獲異常類對(duì)
7、象{//如果上面代碼發(fā)生異常則可在此編寫(xiě)相應(yīng)的異常處理代碼}2021/9/1514湘潭職業(yè)技術(shù)學(xué)院工學(xué)院公共語(yǔ)言運(yùn)行庫(kù)預(yù)定義的系統(tǒng)異常類。異常類說(shuō)明AccessViolationException在試圖讀寫(xiě)受保護(hù)內(nèi)存時(shí)引發(fā)的異常ApplicationException發(fā)生非致命應(yīng)用程序錯(cuò)誤時(shí)引發(fā)的異常ArithmeticException因算術(shù)運(yùn)算、類型轉(zhuǎn)換或轉(zhuǎn)換操作時(shí)引發(fā)的異常DivideByZeroException試圖用零除整數(shù)值或十進(jìn)制數(shù)值時(shí)引發(fā)的異常FieldAccessException試圖非法訪問(wèn)類中私有字段或
8、受保護(hù)字段時(shí)引發(fā)的異常IndexOutofRangeException試圖訪問(wèn)索引超出數(shù)組界限的數(shù)值時(shí)引發(fā)的異常InvalidCastException因無(wú)效類型轉(zhuǎn)換或顯示轉(zhuǎn)換引發(fā)的異常NotSupportedException當(dāng)調(diào)用的方法不受支持時(shí)引發(fā)的異常NullReferenceEx