[英]What is the best way to collect/report unexpected errors in .NET Window Applications?
我正在尋找比我們目前處理意外生產錯誤更好的解決方案,而不需要重新發明輪子。
我們的大量產品是安裝在遠程站點的WinForm和WPF應用程序。 從NullReferenceExceptions到“常規網絡錯誤”,不可避免地會發生意外錯誤。 因此,從程序員錯誤到環境問題。
目前,使用log4net記錄所有這些未處理的異常,然后通過電子郵件發回給我們進行分析 。 但是我們發現,有時這些錯誤“報告”包含的信息太少,無法識別問題。
在這些報告中,我們需要以下信息:
我真的不想通過從頭開始開發這個輪子來重新發明輪子。 所需的組件:
注意:我們將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.