来自WPF应用程序的异常报告

Ste*_*son 15 c# wpf error-handling error-reporting

所以假设我碰巧在我的应用程序中有一个未处理的异常,或者由于某种原因它崩溃了.有什么方法让我捕获输出并在应用程序崩溃时显示错误报告对话框.

我在想的是在后台运行一个小程序,其唯一的工作就是监听主应用程序的异常退出,然后显示"报告"对话框,用户可以选择向我发送错误输出.

不确定如何实现这一点,或者这是否是正确的方法.

报告错误消息将是一项简单的任务,但我不知道如何捕获未处理异常的输出或获取退出代码(我假设程序在崩溃时会给出除0以外的退出代码).

在正确的方向上轻推是很棒的.

Rem*_*anu 12

您最好的机会在应用程序内.有两个钩子:

"全能"的适当位置取决于您的应用程序语义,很难说您应该知道应用程序的位置.应用程序还需要设置Application.SetUnhandledExceptionMode.

拥有外部看门狗不太有用,因为它无法提供任何有意义的信息,为什么应用程序崩溃.当它检测到"意外"退出时(它是如何知道"意外"?)为时已晚,无法收集任何有用的信息.使用内部处理程序,您可以收集异常和堆栈,并将它们提交给像bugcollect.com这样的分析服务,然后您就可以了解现在只发生了什么,以及它发生的频率以及受影响的部署(其中,它发生).还有其他类似的服务,例如exceptioneer.comWindows错误报告(这需要您的代码由Verisign等受信任的授权证书签名).依托于对事件的收集服务远远优于发送邮件,你不想醒来,发现在你的收件箱2K事件的电子邮件,并开始通过他们筛选明白什么事.

最后一个世界:不要重新发明轮子:已经有很多框架可以收集和记录异常,例如log4netelmah.


Teo*_*gul 9

您可以使用NBug库(也可以在这里使用nuget包以便于安装).只需安装NuGet包并进行如下配置:

NBug.Settings.Destination1 =
  "Type=Mail;From=me@mycompany.com;To=bugtracker@mycompany.com;SmtpServer=smtp.mycompany.com;";
AppDomain.CurrentDomain.UnhandledException += NBug.Handler.UnhandledException;
Application.Current.DispatcherUnhandledException += NBug.Handler.DispatcherUnhandledException;
Run Code Online (Sandbox Code Playgroud)

现在所有未处理的异常都会被很好地捕获并为您提供礼物包装,您将通过电子邮件获得异常的完整详细信息.使用配置程序工具确保配置正确.