C# 3.0面向?qū)ο缶幊塘?錯(cuò)誤和調(diào)試.ppt_第1頁(yè)
C# 3.0面向?qū)ο缶幊塘?錯(cuò)誤和調(diào)試.ppt_第2頁(yè)
C# 3.0面向?qū)ο缶幊塘?錯(cuò)誤和調(diào)試.ppt_第3頁(yè)
C# 3.0面向?qū)ο缶幊塘?錯(cuò)誤和調(diào)試.ppt_第4頁(yè)
C# 3.0面向?qū)ο缶幊塘?錯(cuò)誤和調(diào)試.ppt_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第 6 講:程序的生成、調(diào)試和異常處理,本章學(xué)習(xí)目標(biāo): 使用Visual Studio 2008生成程序 使用Visual Studio 2008調(diào)試程序 掌握C#應(yīng)用程序中的異常處理技術(shù),目標(biāo),在 Visual Studio 2008中生成程序 Visual Studio 2008的調(diào)試功能 異常處理 小結(jié) 實(shí)驗(yàn) 習(xí)題,在 Visual Studio 2008中生成程序,在創(chuàng)建每個(gè) Visual Studio 項(xiàng)目時(shí),系統(tǒng)會(huì)定義默認(rèn)的項(xiàng)目配置并分配默認(rèn)的解決方案生成配置,以便在生成應(yīng)用程序時(shí)提供必要的參數(shù) 在開(kāi)發(fā)過(guò)程中,解決方案及其各個(gè)項(xiàng)目通常都會(huì)以“Debug”版本的方式生成并測(cè)試 在項(xiàng)目

2、或解決方案完全開(kāi)發(fā)并充分調(diào)試后,以“Release”方式編譯其組件,正常的應(yīng)用程序的開(kāi)發(fā)和發(fā)布過(guò)程:,在 Visual Studio 2008中生成程序 Visual Studio 2008的調(diào)試功能 異常處理 小結(jié) 實(shí)驗(yàn) 習(xí)題,Visual Studio 2008的調(diào)試功能,Visual Studio 2008 調(diào)試器,隨堂練習(xí),開(kāi)始(或繼續(xù))執(zhí)行 中斷執(zhí)行 停止執(zhí)行 逐句執(zhí)行 調(diào)試工具欄,Visual Studio 2008 調(diào)試器,Visual Studio 調(diào)試命令:,從“調(diào)試”菜單中選擇“開(kāi)始(F5)”、“逐語(yǔ)句”或“逐過(guò)程”, 或在源窗口中,右擊可執(zhí)行代碼中的某行,然后從快捷菜單中

3、選擇“運(yùn)行到光標(biāo)處”即可開(kāi)始執(zhí)行調(diào)試 如果選擇“運(yùn)行到光標(biāo)處”,則應(yīng)用程序啟動(dòng)并一直運(yùn)行到斷點(diǎn)或光標(biāo)位置,具體看是斷點(diǎn)在前還是光標(biāo)在前 可以使用“調(diào)試”菜單上的“開(kāi)始執(zhí)行(不調(diào)試)”命令,也就是快捷鍵Ctrl+F5,在不使用調(diào)試器的情況下開(kāi)始執(zhí)行項(xiàng)目,Visual Studio 2008 調(diào)試器(續(xù)),開(kāi)始(或繼續(xù))執(zhí)行 :,(1) 使光標(biāo)停在希望程序中斷的地方,然后點(diǎn)擊快捷鍵F9。 (2) 用鼠標(biāo)單擊那一行的前邊界,如下圖所示:,Visual Studio 2008 調(diào)試器(續(xù)),中斷執(zhí)行 :,從“調(diào)試”菜單中選擇“停止調(diào)試” 終止所有正調(diào)試的附加進(jìn)程 停止調(diào)試并重新啟動(dòng),Visual St

4、udio 2008 調(diào)試器(續(xù)),停止執(zhí)行 :,逐語(yǔ)句 逐過(guò)程 跳出,Visual Studio 2008 調(diào)試器(續(xù)),逐句執(zhí)行 :,Visual Studio 2008 調(diào)試器(續(xù)),調(diào)試工具欄: 在Viusal Studio 2008 的標(biāo)準(zhǔn)工具欄的空白處單擊鼠標(biāo)右鍵,從中選擇“調(diào)試”(Debug),調(diào)出“調(diào)試”工具欄。,隨堂練習(xí),下面這段程序在正常使用的時(shí)候不會(huì)出現(xiàn)錯(cuò)誤,但是當(dāng)輸入的參數(shù)不是數(shù)字的時(shí)候,或者B為零的時(shí)候,程序就會(huì)出錯(cuò)。請(qǐng)使用Visual Studio 2008的調(diào)試功能調(diào)試出下面這段程序。出錯(cuò)的地方,分析其出錯(cuò)原因并做出改進(jìn)。 using System; class P

5、rogram static void Main(string args) int cs, bcs; double result; Console.WriteLine(請(qǐng)輸入一個(gè)被除數(shù) A:); bcs = Convert.ToInt32(Console.ReadLine(); Console.WriteLine(請(qǐng)輸入一個(gè)除數(shù) B:); cs = Convert.ToInt32(Console.ReadLine(); result = bcs / cs; Console.WriteLine(那么: A/B= + result); ,在 Visual Studio 2008中生成程序 Visua

6、l Studio 2008的調(diào)試功能 異常處理 小結(jié) 實(shí)驗(yàn) 習(xí)題,異常類(lèi) 使用異常 System.Exception的常用屬性 默認(rèn)異常處理 嵌套的 try塊 用戶定義的異常類(lèi),異常處理,異常類(lèi),在C#中,當(dāng)出現(xiàn)某種異常時(shí),就會(huì)創(chuàng)建一個(gè)異常對(duì)象。這個(gè)對(duì)象包含有助于跟蹤問(wèn)題的信息。我們可以創(chuàng)建自己的異常類(lèi),但.NET已經(jīng)提供了許多預(yù)定義的異常類(lèi) 。,異?;?lèi),常用異常類(lèi)列表:,異?;?lèi) (續(xù)),在該層次結(jié)構(gòu)中有兩個(gè)重要的類(lèi),它們均派生于System.Exception:,System.SystemException 通常由.NET運(yùn)行庫(kù)引發(fā),System.ApplicationException

7、這個(gè)類(lèi)非常重要,因?yàn)樗堑谌蕉x的異常類(lèi)。,異?;?lèi)(續(xù)),其他可能用到的異常類(lèi)包括:,StackOverflowException如果分配給堆棧的內(nèi)存區(qū)域已滿,就會(huì)引發(fā)這個(gè)異常。,EndOfStreamException這個(gè)異常通常是因?yàn)橐x到文件末尾而引發(fā)的。,OverflowException如果要在checked環(huán)境下把包含值40的int類(lèi)型數(shù)據(jù)轉(zhuǎn)換為uint數(shù)據(jù),就會(huì)引發(fā)這個(gè)異常。,使用異常,C#代碼中處理可能的錯(cuò)誤情況,一般要把程序的相關(guān)部分分成3種不同類(lèi)型的代碼塊:,try塊包含的代碼組成了程序的正常操作部分,但可能遇到某些嚴(yán)重的錯(cuò)誤情況。,catch塊包含的代碼處理各種錯(cuò)誤情

8、況,這些錯(cuò)誤是try塊中的代碼執(zhí)行時(shí)遇到的。,finally塊包含的代碼清理資源或執(zhí)行要在try塊或catch塊末尾執(zhí)行的其他操作 。,try-catch try-finally try-catch-finally throw,使用異常 (續(xù)),catch 子句使用時(shí)可以不帶任何參數(shù),這種情況下它捕獲任何類(lèi)型的異常,并被稱為一般 catch 子句。 catch (InvalidCastException e) ,try-catch,try-catch 語(yǔ)句由一個(gè) try 塊后跟一個(gè)或多個(gè) catch 子句構(gòu)成 。,在 catch 塊中可以使用 throw 語(yǔ)句再次引發(fā)已由 catch 語(yǔ)句捕獲

9、的異常。 catch (InvalidCastException e) throw (e); /重新拋出異常 ,try-catch (續(xù)),try-catch 語(yǔ)句由一個(gè) try 塊后跟一個(gè)或多個(gè) catch 子句構(gòu)成 。,try-finally,finally 塊用于清除 try 塊中分配的任何資源以及運(yùn)行任何即使在發(fā)生異常時(shí)也必須執(zhí)行的代碼??刂瓶偸莻鬟f給 finally 塊,與 try 塊的退出方式無(wú)關(guān) 。,catch 用于處理語(yǔ)句塊中出現(xiàn)的異常,而 finally 用于保證代碼語(yǔ)句塊的執(zhí)行,與前面的 try 塊的退出方式無(wú)關(guān)。,try-catch-finally,catch 和 fin

10、ally 一起使用的常見(jiàn)方式:在 try 塊中獲取并使用資源,在 catch 塊中處理異常情況,并在 finally 塊中釋放資源。,throw,throw 語(yǔ)句用于發(fā)出在程序執(zhí)行期間出現(xiàn)反常情況(異常)的信號(hào)。引發(fā)的異常是一個(gè)對(duì)象,該對(duì)象的類(lèi)是從 System.Exception 派生的 。,通常 throw 語(yǔ)句與 try-catch 或 try-finally 語(yǔ)句一起使用。當(dāng)引發(fā)異常時(shí),程序查找處理此異常的 catch 語(yǔ)句。也可以用 throw 語(yǔ)句重新引發(fā)已捕獲的異常。,System.Exception的常用屬性,System.Exception的常用屬性,默認(rèn)異常處理,嵌套的 t

11、ry塊,用戶定義的異常類(lèi),假設(shè)你正在實(shí)現(xiàn)一個(gè)方法叫做monthName,這個(gè)方法接受一個(gè)簡(jiǎn)單的int類(lèi)型的參數(shù),并且返回一個(gè)對(duì)應(yīng)的月份。比如,monthName(1)返回“January”。問(wèn)題是:當(dāng)參數(shù)小于1或者參數(shù)大于12的時(shí)候,方法應(yīng)該返回什么呢? 學(xué)習(xí)了異常之后,我們可以想到一個(gè)很好的辦法,即方法不返回任何東西,而僅僅引發(fā)一個(gè)異常。雖然.NET Framework類(lèi)庫(kù)包含了大量的定義好的異常處理類(lèi)。但是,現(xiàn)實(shí)中會(huì)遇到各種各樣系統(tǒng)未定義過(guò)的錯(cuò)誤。此時(shí),就需要我們自己定義一個(gè)異常處理類(lèi),并在出現(xiàn)這種異常的時(shí)候使用throw關(guān)鍵字引發(fā)此異常。,在 Visual Studio 2008中生成程

12、序 Visual Studio 2008的調(diào)試功能 異常處理 小結(jié) 實(shí)驗(yàn) 習(xí)題,本章重點(diǎn)介紹了如何生成和調(diào)試C#程序,包括設(shè)置和修改斷點(diǎn),使用調(diào)試窗口;還介紹了如何進(jìn)行異常處理。,小結(jié),在 Visual Studio 2008中生成程序 Visual Studio 2008的調(diào)試功能 異常處理 小結(jié) 實(shí)驗(yàn) 習(xí)題,實(shí)驗(yàn),參照實(shí)驗(yàn)手冊(cè),并在教師指導(dǎo)下完成實(shí)驗(yàn)報(bào)告。,在 Visual Studio 2008中生成程序 Visual Studio 2008的調(diào)試功能 異常處理 小結(jié) 實(shí)驗(yàn) 習(xí)題,習(xí)題,1.填空題 (1)當(dāng)一個(gè)方法執(zhí)行時(shí)出錯(cuò)了,會(huì)_。 (2)try塊運(yùn)行后,總是會(huì)執(zhí)行_塊中的代碼。 (3

13、)所有的異常類(lèi)都從_繼承。 (4)Convert.ToInt32方法會(huì)引發(fā)_,如果輸入的參數(shù)不能轉(zhuǎn)化為整數(shù)。,習(xí)題(續(xù)),判斷正誤,如果錯(cuò)誤,請(qǐng)說(shuō)明原因。 (1)當(dāng)前方法產(chǎn)生的異??偸怯僧?dāng)前的方法來(lái)處理。 (2)用戶自定義的異常應(yīng)該從System.Exception類(lèi)繼承。 (3)當(dāng)訪問(wèn)數(shù)組的索引越界時(shí),會(huì)有異常引發(fā)。 (4)如果在try塊后沒(méi)有任何catch塊,那么finally塊也是可選的。,習(xí)題(續(xù)),編程改錯(cuò)題 (1) 在try語(yǔ)句中,引發(fā)一個(gè)NullReferenceException異常,捕獲其并報(bào)告。最終執(zhí)行輸出“Executing finally block.”。 輸出: Ex

14、ecuting the try statement. System.NullReferenceException: Object reference not set to an instance of an object. at EHClass.Main() Caught exception #1. Executing finally block.,習(xí)題(續(xù)),3 .編程改錯(cuò)題 (2)執(zhí)行以下語(yǔ)句,驗(yàn)證輸出語(yǔ)句有無(wú)執(zhí)行,并解釋理由。 using System; public class ThrowTest static void Main() string s = null; if (s =

15、null) throw new ArgumentNullException(); Console.Write(The string s is null); ,習(xí)題(續(xù)),3. 編程改錯(cuò)題 (3)判斷以下程序會(huì)在哪里產(chǎn)生異?;蝈e(cuò)誤。 static void Main() int x; try / Dont initialize this variable here. x = 123; catch / Error: Use of unassigned local variable x. Console.Write(x); ,習(xí)題(續(xù)),3. 編程改錯(cuò)題 (4)判斷以下程序是否可以捕獲兩個(gè)異常。如不可以,如何更改? using System; class MainClass static void ProcessString(string s) if (s = null) throw new

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論