有時我們需要判斷正在運行的程序是處於開發環境下(調試模式),還是正常運行狀態(已編譯後).以前看到個VB6的判斷方式:
Public Function IsDebugMode() As Boolean
IsDebugMode = False
On Error Resume Next
Debug.Print 1 / 0
If Err.Number <> 0 Then
IsDebugMode = True
End If
End Function
這段代碼的原理就在於:在編譯之後的應用程序運行時會直接忽略Debug.Print這一語句.也就是說,若不產生錯誤,說明這個語句根本沒有執行,因而是在編譯後的實際環境中;而如果產生了錯誤,則說明這個語句正常地執行了,說明是在開發環境中.
如今這個方法用在VB2005中不行了.因爲在.NET 2005中,1/0並不會產生錯誤,而是得到一個輸出結果:無窮大.這樣的話,在VB2005中必須讓Debug去Print一個會產生異常的表達式.可以改進如下:
Public Function IsDebugMode() As Boolean
Dim o As Object = Nothing
Try
Debug.Print(o.Name)
Return False
Catch ex As Exception
Return True
End Try
End Function
在這段代碼中,定義了一個對象變量,並賦值爲空,因此,o.Name會產生一個System.NullReferenceException的異常.