在程式中,我們常會使用到 try… catch… 語法來偵測錯誤,並把錯誤訊息顯示出來以方便除錯。前兩天我在跑一個 WinForm 程式的時候,怎麼跑都只有 JIT Debug 的錯誤訊息,完全不知道錯在哪,寫了個 try… catch… 卻連執行都沒有執行到。後來 Google 了一下,發現有人寫了一個 Class,可以用來 catch 所謂的 UnHandled 的例外,並且有 WinForm 跟 Console Application 兩種不同的呼叫法。本來想直接拿來用的,後來靈光一閃,直接在 Main Form 的建構的地方使用靈光閃現時的 Idea,果然將錯誤訊息正確的給顯示出來了,而不用去呼叫找到的那組 Class。
這裡的 Sample 假設 Main Form 的名稱為 frmMain,以下是程式進入點 void Main() 修改如下:
static void Main()
{
try
{
Application.Run(new frmMain());
}
catch (Exception e)
{
MessageBox.Show (e.Message + “\r\n” + e.Source + “\r\n” + e.TargetSite, “[Coolfire] – UnHandled exception found” );
}
}
如此即會正確顯示在 Main Form 啟始前所發生的例外。
PS. 此次補捉的例外是在 .NET Application 的 Setup Client 端,程式可以在開發端執行,在 Client 端雖然裝上了 .NET Framework,但是還是出現錯誤,利用此方法才正確顯示出若程式中使用了 System.Data 則需使用 MDAC 2.6 以上才能執行,於是在 Deploy 的 Document 上再加上了一個安裝的程序。
1. 安裝 .NET Framework
2. 安裝 MDAC 2.8
3. 安裝 .NET Application
這個方法運用在 WinForm 程式時有個額外的好處,就是發生其它 UnHandled 的 exception 時,也會進入這段程式顯示正確的錯誤訊息了!!