繁体   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