16. C# -- 調試和錯誤處理

來源:互聯網
上載者:User

標籤:c#

 

 調試和錯誤處理

·         錯誤類型:

在編譯期間和運行期間,致命錯誤(語法錯誤)都會使應用程式完全失敗,語義錯誤或邏輯錯誤比較微妙,可能會使應用程式執行不正確,或者以未預料的方式執行;

  • 輸出調試資訊:

我們在編寫代碼,把有協助的資訊輸出到output視窗中,以協助在IDE中進行調試。為此需要使用Debug和Trace系列函數,其中Debug函數在發布版本中會被忽略。對應投入生產的應用程式,應把調試輸出寫入記錄檔,在VS中,還可以使用跟蹤點輸出調試資訊;

  • 中斷模式:

可以通過斷點,判斷語句,或者在發生未處理的異常時,手工進行中斷模式(暫停應用程式的狀態)。可以在代碼的任意位置添加斷點,在VS中,還可以把斷點配置為僅在特定條件下中斷執行,在中斷模式下,可以檢查變數的內容(使用各種調試資訊視窗),每次執行一行代碼,以協助確定哪裡出現了錯誤;

  • 異常:

異常時運行期間發生的錯誤,可以通過編程方式捕獲和處理這種錯誤,以防止應用程式終止。跳躍函數或處理變數時,可能會發生許多不同類型的異常,還可以使用throw關鍵字產生異常;

  • 異常處理:

代碼中未處理的異常會使應用程式終止。使用try,catch和finally代碼塊處理異常。Try 塊標記了一個啟用異常處理的程式碼片段,catch塊包含的代碼僅在異常發生時執行,它可以匹配特定類型的異常,還可以保護多個catch 塊,Finally 塊指定異常處理完畢後執行的代碼,如果沒有發生異常,Finally 塊就指定在try塊執行完畢後執行的代碼,只能包含一個Finally塊,如果包含了catch 塊,Finally塊是可選的。

 

1.兩種方式執行應用程式:

·         Debug

F5或按綠色play 按鈕

·         非debug

Debug |Start  without debugging 或ctrl + F5

2.調試:如何使用調試技巧確定未按預期方式執行的那些代碼,並修改它們。

3.應用程式狀態:

 1.非中斷模式(運行期間或正常執行)

Using system.diagnostics;

輸出調試資訊兩種方式:診斷輸出和跟蹤點

650) this.width=650;" style="float:none;" title="1.png" src="http://s3.51cto.com/wyfs02/M01/6C/E0/wKioL1VVWTCgowu4AAJmwMcHFJM680.jpg" alt="wKioL1VVWTCgowu4AAJmwMcHFJM680.jpg" />

診斷輸出:debug.writeline();  trace.writeline() (不常用)

診斷輸出:從應用程式中輸出調試結果時使用這種方法,尤其是在要輸出的字串比較複雜,涉及幾個變數或許多資訊的情況下,使用該方法比較好。如果要在發布模式下獲得執行應用程式的調試結果,trace命令是唯一選擇;

Debug模式下,記述在迴圈中計算出結果所採取的步驟;

Release 模式下,僅能看到計算的最終結果,因為沒有調用debug.writeline()函數;

650) this.width=650;" style="float:none;" title="2.png" src="http://s3.51cto.com/wyfs02/M01/6C/E5/wKiom1VVV7bzBWANAADB_HG7yBo876.jpg" alt="wKiom1VVV7bzBWANAADB_HG7yBo876.jpg" />

跟蹤點:是把資訊輸出到output視窗的另一種方法,是VS的一個功能。其作用和Debug.WriteLine()相同。只輸出調試資訊且不修改代碼;(常用)

650) this.width=650;" style="float:none;" title="3.png" src="http://s3.51cto.com/wyfs02/M02/6C/E0/wKioL1VVWTGAkoIeAADg2aSMab8746.jpg" alt="wKioL1VVWTGAkoIeAADg2aSMab8746.jpg" />

2.中斷模式調試

650) this.width=650;" style="float:none;" title="4.png" src="http://s3.51cto.com/wyfs02/M02/6C/E5/wKiom1VVV7fwoLmUAAE1I4scQts734.jpg" alt="wKiom1VVV7fwoLmUAAE1I4scQts734.jpg" />

650) this.width=650;" style="float:none;" title="5.png" src="http://s3.51cto.com/wyfs02/M00/6C/E0/wKioL1VVWTKyfQ-9AAEGi8J_F_0810.jpg" alt="wKioL1VVWTKyfQ-9AAEGi8J_F_0810.jpg" />

斷點:

650) this.width=650;" style="float:none;" title="6.png" src="http://s3.51cto.com/wyfs02/M00/6C/E5/wKiom1VVV7mzG4qVAASi0REuyXk353.jpg" alt="wKiom1VVV7mzG4qVAASi0REuyXk353.jpg" />

650) this.width=650;" style="float:none;" title="7.png" src="http://s3.51cto.com/wyfs02/M01/6C/E0/wKioL1VVWTaQHUGKAAM2qvHvTHE238.jpg" alt="wKioL1VVWTaQHUGKAAM2qvHvTHE238.jpg" />

650) this.width=650;" style="float:none;" title="8.png" src="http://s3.51cto.com/wyfs02/M01/6C/E5/wKiom1VVV7yS03DCAAHWqCCl-28928.jpg" alt="wKiom1VVV7yS03DCAAHWqCCl-28928.jpg" />

650) this.width=650;" style="float:none;" title="9.png" src="http://s3.51cto.com/wyfs02/M02/6C/E0/wKioL1VVWTfgOfxhAADK2QsSyQc154.jpg" alt="wKioL1VVWTfgOfxhAADK2QsSyQc154.jpg" />

4.監視變數的內容:

650) this.width=650;" style="float:none;" title="10.png" src="http://s3.51cto.com/wyfs02/M02/6C/E5/wKiom1VVV77Rx9WOAAHYV4mnYsg886.jpg" alt="wKiom1VVV77Rx9WOAAHYV4mnYsg886.jpg" />

5.逐步執行代碼

650) this.width=650;" style="float:none;" title="11.png" src="http://s3.51cto.com/wyfs02/M00/6C/E0/wKioL1VVWTnQwL7wAAFHHxocjaU305.jpg" alt="wKioL1VVWTnQwL7wAAFHHxocjaU305.jpg" />

6.Immediate 和command 視窗

650) this.width=650;" style="float:none;" title="12.png" src="http://s3.51cto.com/wyfs02/M00/6C/E5/wKiom1VVV7-Ai_sMAAEZ91JeB5k504.jpg" alt="wKiom1VVV7-Ai_sMAAEZ91JeB5k504.jpg" />

7.Call stack 視窗

650) this.width=650;" style="float:none;" title="13.png" src="http://s3.51cto.com/wyfs02/M01/6C/E0/wKioL1VVWTqycmU9AADrsWljEME711.jpg" alt="wKioL1VVWTqycmU9AADrsWljEME711.jpg" />

650) this.width=650;" style="float:none;" title="14.png" src="http://s3.51cto.com/wyfs02/M01/6C/E5/wKiom1VVV8GSKTKVAAJcPNaqZGg153.jpg" alt="wKiom1VVV8GSKTKVAAJcPNaqZGg153.jpg" />

8.錯誤處理,處理異常

Try … catch.. finally

650) this.width=650;" style="float:none;" title="15.png" src="http://s3.51cto.com/wyfs02/M02/6C/E0/wKioL1VVWT3ggMk_AAJ5eENECvY495.jpg" alt="wKioL1VVWT3ggMk_AAJ5eENECvY495.jpg" />

650) this.width=650;" style="float:none;" title="16.png" src="http://s3.51cto.com/wyfs02/M02/6C/E5/wKiom1VVV8SCLhuiAAGpFP0jZUg656.jpg" alt="wKiom1VVV8SCLhuiAAGpFP0jZUg656.jpg" />

650) this.width=650;" style="float:none;" title="17.png" src="http://s3.51cto.com/wyfs02/M00/6C/E0/wKioL1VVWT7ihG58AADHk_ZjSiE911.jpg" alt="wKioL1VVWT7ihG58AADHk_ZjSiE911.jpg" />

650) this.width=650;" style="float:none;" title="18.png" src="http://s3.51cto.com/wyfs02/M00/6C/E5/wKiom1VVV8XDMTzXAAG9F5Whi0Y473.jpg" alt="wKiom1VVV8XDMTzXAAG9F5Whi0Y473.jpg" />

 

9.列出和配置異常

Debug –exceptions—common language runtime exceptions.可看到system 名稱空間中的異常。

10.異常處理的注意事項

 為比較特殊的異常提供catch 塊,catch塊順序錯誤,應用程式就會編譯失敗。

若使用throw,該異常不會有當前的try.. catch.. finally 塊處理

 

本文出自 “Ricky's Blog” 部落格,請務必保留此出處http://57388.blog.51cto.com/47388/1651512

16. C# -- 調試和錯誤處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.