簡體   English   中英

在.NET窗口應用程序中收集/報告意外錯誤的最佳方法是什么?

[英]What is the best way to collect/report unexpected errors in .NET Window Applications?

我正在尋找比我們目前處理意外生產錯誤更好的解決方案,而不需要重新發明輪子。

我們的大量產品是安裝在遠程站點的WinForm和WPF應用程序。 從NullReferenceExceptions到“常規網絡錯誤”,不可避免地會發生意外錯誤。 因此,從程序員錯誤到環境問題。

目前,使用log4net記錄所有這些未處理的異常,然后通過電子郵件發回給我們進行分析 但是我們發現,有時這些錯誤“報告”包含的信息太少,無法識別問題。

在這些報告中,我們需要以下信息:

  1. 應用名稱
  2. 應用版本
  3. 工作站
  4. 也許是一個屏幕截圖
  5. 例外細節
  6. 操作系統
  7. 可用內存
  8. 運行流程
  9. 等等...

我真的不想通過從頭開始開發這個輪子來重新發明輪子。 所需的組件:

  1. 錯誤收集(詳情如上所述)
  2. 錯誤'發件人'(如果數據庫或互聯網不可用,則需要排隊)
  3. 錯誤數據庫
  4. 分析和報告這些錯誤。 例如,10個最常見的錯誤或超時發生在下午4:00到下午5:00之間。 版本x和y之間的錯誤如何比較?

注意:我們將SmartAssembly視為一種可能的解決方案,但盡管接近它並不能完全滿足我們的需求,但我希望能夠聽到其他開發人員的工作以及是否存在其他替代方案。

編輯:感謝您的答案到目前為止。 也許我在原始問題中並不清楚,問題不在於如何捕獲所有無法處理的異常,而是如何處理它們以及圍繞它們創建報告引擎(分析)。

我建議傑夫阿特伍德關於用戶友好異常處理的文章,它完成了你所要求的大部分內容(應用程序信息,屏幕截圖,異常詳細信息,操作系統,記錄到文本文件和電子郵件),並包含源代碼,以便您添加額外的你需要的東西。

您可以附加到未處理的異常事件並記錄/點擊webservice / etc。

[STAThread]
static void Main() 
{
    Application.ThreadException += new ThreadExceptionEventHandler(OnUnhandledException);
    Application.Run(new FormStartUp());
}
static void OnUnhandledException(object sender, ThreadExceptionEventArgs t) 
{
    // Log
}

我還發現這個代碼片段使用AppDomain而不是ThreadException:

static class EntryPoint {
    [MTAThread]
    static void Main() {
        // Add Global Exception Handler
        AppDomain.CurrentDomain.UnhandledException += 
            new UnhandledExceptionEventHandler(OnUnhandledException);

        Application.Run(new Form1());
    }

    // In CF case only, ALL unhandled exceptions come here
    private static void OnUnhandledException(Object sender, 
        UnhandledExceptionEventArgs e) {
        Exception ex = e.ExceptionObject as Exception;
        if (ex != null) {
            // Can't imagine e.IsTerminating ever being false
            // or e.ExceptionObject not being an Exception
            SomeClass.SomeStaticHandlingMethod(ex, e.IsTerminating);
        }
    }
}

以下是一些文檔: AppDomain Unhandled Exception

除了自己處理它之外,實際上沒有一種通用的方法可以重用,它確實需要與應用程序的接口正確集成,但是你可以設置一個帶有應用程序名稱,異常和所有這些好東西,並為您的所有應用程序提供集中點。

您可能想要研究JetBrain的Omea Reader內置的錯誤報告功能。 它有一個包含所有錯誤處理組件,可在發生意外錯誤時彈出對話框。 在將問題提交給JetBrain的公共錯誤收集Web服務之前,用戶可以輸入更多詳細信息。

他們使Omea開源,允許社區將.NET 1.1代碼庫升級到v2或3. http://www.jetbrains.net/confluence/display/OMEA/this+link

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM