C# 3.0面向對象編程六 錯誤和調試.ppt_第1頁
C# 3.0面向對象編程六 錯誤和調試.ppt_第2頁
C# 3.0面向對象編程六 錯誤和調試.ppt_第3頁
C# 3.0面向對象編程六 錯誤和調試.ppt_第4頁
C# 3.0面向對象編程六 錯誤和調試.ppt_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

7、這個類非常重要,因為它是第三方定義的異常類。,異?;悾ɡm(xù)),其他可能用到的異常類包括:,StackOverflowException如果分配給堆棧的內存區(qū)域已滿,就會引發(fā)這個異常。,EndOfStreamException這個異常通常是因為要讀到文件末尾而引發(fā)的。,OverflowException如果要在checked環(huán)境下把包含值40的int類型數(shù)據(jù)轉換為uint數(shù)據(jù),就會引發(fā)這個異常。,使用異常,C#代碼中處理可能的錯誤情況,一般要把程序的相關部分分成3種不同類型的代碼塊:,try塊包含的代碼組成了程序的正常操作部分,但可能遇到某些嚴重的錯誤情況。,catch塊包含的代碼處理各種錯誤情

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

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

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

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

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

13、)所有的異常類都從_繼承。 (4)Convert.ToInt32方法會引發(fā)_,如果輸入的參數(shù)不能轉化為整數(shù)。,習題(續(xù)),判斷正誤,如果錯誤,請說明原因。 (1)當前方法產(chǎn)生的異??偸怯僧斍暗姆椒▉硖幚怼?(2)用戶自定義的異常應該從System.Exception類繼承。 (3)當訪問數(shù)組的索引越界時,會有異常引發(fā)。 (4)如果在try塊后沒有任何catch塊,那么finally塊也是可選的。,習題(續(xù)),編程改錯題 (1) 在try語句中,引發(fā)一個NullReferenceException異常,捕獲其并報告。最終執(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ù)),3 .編程改錯題 (2)執(zhí)行以下語句,驗證輸出語句有無執(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ù)),3. 編程改錯題 (3)判斷以下程序會在哪里產(chǎn)生異?;蝈e誤。 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ù)),3. 編程改錯題 (4)判斷以下程序是否可以捕獲兩個異常。如不可以,如何更改? using System; class MainClass static void ProcessString(string s) if (s = null) throw new

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論