2014-03-03 45 views
1

我開發了第三方公司使用的應用程序。 由於我是一個可怕的編碼器,應用程序仍然有一些導致它崩潰的錯誤(例如,未處理的nullpointerexception)。給用戶選項發送未捕獲異常的錯誤報告

它是運行在.NET 4.5的Windows的窗體應用程序,現在他們只是得到了經典的「未處理的異常導致應用程序終止的更多信息,請按詳細信息」。

試圖說服他們,按「詳細信息」,併發送堆棧跟蹤對我來說是非常有用的,但他們都似乎不願意。

是否可以自動執行此行爲,像他們展示一個自定義全局「異常捕手」在那裏他們可以只需按一個按鈕通過電子郵件將其發送給我。

Inbefore「全球異常處理不好」和「爲什麼你的應用程序拋出NullPointerException異常,你是一個壞的編碼器等。」

BR Tomas Anyuru

回答

2

我想你得到的例外是未處理的。

正因爲如此,你將不得不使用Application.ThreadException事件來處理它們。因爲沒有.NET自動郵件發送和消息顯示,你將不得不在自己的事件中實現自己。

請看看一個answer I wrote到有異常捕獲策略的一些例子。

+0

謝謝我相信這就是我一直在尋找的東西。去看看,但標記你的答案是正確的。 – taracus

2

在try-catch語句中包裝整個main()函數。
這樣任何未處理的異常將回滾,將在你的catch塊被逮住:

static void main() 
{ 
    try 
    { 
     // the application code... 
    } 
    catch (Exception ex) 
    { 
     DialogResult result = MessageBox.Show(
     "Some error occured, please click ok to send it to the develpoer"); 
     if (result = OK) 
      email(ex); // this is your function to send the email. 
         // useful information is also in ex.message 
     // here program will exit without error! 
    } 
} 
+0

這是否真的有可能,在try-block下運行一切正常? – taracus

+0

你可以試試! ;) 沒關係!儘管任何深層次的程序中的任何邏輯錯誤或異常都會導致該位置離開並最終放在catch語句中,因此,catch語句結束後,程序將結束。你可以在你需要的任何地方,在你的功能和更深的程序中使用它! – Shamim

0

您可以使用日誌4淨它是開源的日誌記錄工具,使用了大量的Java開發人員,而這版本是專門用於.Net http://logging.apache.org/log4net/

+0

你能否詳細說明這是如何回答這個問題的?我想他想創建一個全局異常處理程序,並且便於發送一封包含異常細節的電子郵件。 –

0

除了@Shamim代碼,您可以將您的主函數包裝在try,catch塊中,因爲此處的catch塊將跟蹤try塊中調用的任何函數內發生的異常。

拍攝catch塊內部郵件有時會引發和有關線程異常終止,所以最後將是正確的地方這樣做:

catch (Exception err) 
       { 
        mailBody = "Error: " + Convert.ToString(err.Message) + "<br /> Source: " + Convert.ToString(err.Source); 
        //Can display some message to user in an Literal Control from here. 
       } 
       finally 
       { 
        if (!string.IsNullOrEmpty(mailBody)) 
        { 
         mailObject.To.Add(mailTo); 
         mailObject.CC.Add(mailCc); 
         mailObject.Body = mailBody; 

         MailService(mailObject); 
        } 
       } 

MailService的是發送郵件,其接受MailObject作爲參數的方法。

相關問題