Something About Assert()——C#中的斷言

來源:互聯網
上載者:User

如何儘早地發現Bug,提高軟體品質的文章。看到了斷言技術,感覺斷言是每個程式員必備的基本功。可以讓程式中的Bug在離其發生地最近的地方被斷言發現,防止Bug的蔓延。 
  在.NET中的斷言的使用,是使用System.Dig.Debug。斷言一般是在程式處於Debug模式下,才起作用。而可以在程式發布時(即Release模式),編譯器會採用條件編譯,將斷言從Release版本的dll中去掉。 
  該使用斷言幾種使用情境,如: 
1、方法參數的合法性 
2、對於非法情況進行斷言而對於錯誤情況不斷言且必須處理 
3、對於任何假定進行斷言 
4、用斷言對程式開發環境(OS/Compiler/Hardware   )的假設進行檢查 
5、編寫防錯程式,然後在處理錯誤之後可用斷言宣布發生錯誤(一般對於Switch語句中的default進行斷言) 
6、用斷言保證沒有定義的特性或功能不被使用(如果原先規定的一部分功能尚未實現,應進行斷言)。 
  這些斷言的使用情境,我都同意。不過,我有以下幾個疑問: 
1、對於第一條,由於斷言會在程式的Release版本中由編譯器自動去掉,那麼往往我們開發一個基本庫,public、protected修飾的方法怎麼能保證調用者輸入的參數的合法性呢(當然如果是調用者使用的是Debug版本的程式那是沒有什麼問題)。 
2、我們將程式發布給使用者,即使我們在開發過程中使用了斷言,可以大大提高程式的品質,但是難免程式中仍然有Bug。那麼使用者在使用Release版本的程式時,如果程式出現Bug,我們怎麼才能像調試階段一樣,在離Bug出生地最近的地方,發現它呢?我目前,只認為可以將程式出現的異常,在程式的最上層,捕獲所有的異常,並將異常資訊及堆棧資訊作為日誌儲存下來。但是這個時候,我們還是難以定位這個Bug,因為其出生地已經難以定位了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.