假设我的应用程序碰巧有一个未处理的异常,或者它由于某种原因崩溃了。 有什么方法可以让我在应用程序崩溃时捕获输出并显示错误报告对话框。
我在想的是在后台运行一个小程序,它唯一的工作就是监听主应用程序的异常退出,然后显示“报告”对话框,用户可以在其中选择通过电子邮件将输出结果发送给我的错误。
不太确定如何实现,或者这是否是正确的方法。
报告错误消息是一件容易的事,但我不知道如何捕获未处理异常的输出或获取退出代码(我假设程序在崩溃时会给出 0 以外的退出代码).
向正确的方向插入会很棒。
最佳答案
您最好的机会是在应用程序内部。有两个钩子(Hook):
-
AppDomain.UnhandledException
是最终的“包罗万象” -
Application.ThreadException
是针对 Forms 线程中发生的异常的 UI 特定包罗万象
“包罗万象”的正确位置取决于您的应用程序语义,并且在不知道您的应用程序的情况下很难说出您应该把它放在哪里。应用程序还需要设置 Application.SetUnhandledExceptionMode
.
拥有外部看门狗的用处不大,因为它无法提供应用程序崩溃原因的任何有意义的信息。当它检测到“意外”退出时(它怎么知道是“意外”?)已经太晚了,无法收集任何有用的信息。使用内部处理程序,您可以收集异常和堆栈并将它们提交给分析服务,如 bugcollect.com然后您将在了解现在发生了什么、发生的频率以及哪些部署受到影响(哪里它发生了)。还有其他类似的服务,如 exceptioneer.com或 Windows Error Reporting (这需要您的代码由 Verisign 等受信任的权威证书签名)。依靠服务来收集事件远比发送邮件好得多,您不想一觉醒来发现收件箱中有 2000 封事件电子邮件并开始筛选它们以了解发生了什么。。 p>
关于c# - 来自 WPF 应用程序的异常报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038572/