2009/9/21

善用 Debug.Assert 進行程式的除錯

除了 Debug.Log 之外,我要介紹另一個簡單的指令,那就是 Debug.Assert,其語法是 Debug.Assert(True/False, Message [, DetailMessage])。它的用法很簡單,如下例:

VB -

Imports System.Diagnostics
...
Debug.Assert(Page.FindControl("testButton") IsNot Nothing, "設計裡面中找不到物件", "testButton 已從設計畫面中被刪除!")

C# -

using System.Diagnostics;
...
if (Page.FindControl("testButton") == null) Debug.("設計裡面中找不到物件", "testButton 已從設計畫面中被刪除!");

 

在這個例子中,Debug.Assert 的第一個參數若為 False (亦即,testButton 物件找不到),那麼就會在伺服器端出現一個錯誤視窗,並帶出你要顯示的訊息。在出現錯誤訊息時,應用程式的執行會暫時中斷,而你可以選擇在錯誤視窗中按下按鈕,選擇將應用程式中止或忽略。如果在同一個網頁有不止一個由 Debug.Assert 發出的錯誤視窗怎麼辦?沒關係,因為程式已經中止執行,所以它會等待你一個一個進行處理。

Debug.Assert 很適合 Run-time 時期的除錯。它所發出的錯誤只會發生在伺服器端,在客戶端並不會看到任何視窗。不過如果發生這種錯誤,由於應用程式會中止執行,而且會一直等待伺服器上有人回應之後才會繼續,如此會造成客戶端一直等不到回應,所以使用上還是留意一下比較好。換句話說,網站的開發時期可以盡量使用這個方法,但交付之後的維護就應該謹慎運用這個功能。或者, 你也可以搭配 #if DEBUG 來做條件式偵錯, 詳情可參考 Will 的「如何善用「偵錯模式」進行 ASP.NET 網站或 .NET 程式開發」一文。

Technorati 的標籤:,,

沒有留言:

張貼留言