在未处理的异常期间,是否有某种方法可以捕获输出并在应用程序崩溃时显示错误报告对话框?
我的想法是在后台运行一个小程序,它唯一的工作就是监听主应用程序的异常退出,然后显示“报告”对话框,用户可以选择通过电子邮件向我发送错误的输出。
不太确定如何实现这一点,或者这是否是正确的方法。
报告错误消息将是一项简单的任务,但我不知道如何捕获未处理异常的输出或获取退出代码(我假设程序崩溃时会给出除 0 之外的退出代码)。
您最好的机会就在应用程序内部。有两个钩子:
-
AppDomain.UnhandledException http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx是终极的“包罗万象”
-
Application.ThreadException http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx是针对 Forms 线程中发生的异常的 UI 特定包罗万象
“包罗万象”的正确位置取决于您的应用程序语义,并且在不了解您的应用程序的情况下很难说出应该将其放在哪里。应用程序还需要设置Application.SetUnhandledExceptionMode http://msdn.microsoft.com/en-us/library/system.windows.forms.application.setunhandledexceptionmode.aspx.
拥有外部看门狗的用处不大,因为它无法提供任何有意义的信息,说明应用程序为何崩溃。当它检测到“意外”退出时(它如何知道是“意外”?),已经太晚了,无法收集任何有用的信息。使用内部处理程序,您可以收集异常和堆栈并将它们提交给分析服务,例如bugcollect.com http://bugcollect.com/然后你现在就能理解了what发生了,而且还多常发生这种情况以及哪些部署受到影响(where它发生了)。还有其他类似的服务,例如异常者网站 http://exceptioneer.com/tour/ or the Windows 错误报告 http://msdn.microsoft.com/en-us/windows/hardware/gg487440(这要求您的代码由受信任的权威证书(如 Verisign)签名)。依靠服务收集事件远远优于发送邮件,您不想一觉醒来发现收件箱中有 2000 封事件电子邮件并开始筛选它们以了解情况what发生了。
最后一个世界:不要重新发明轮子:已经有很多框架来收集和记录异常,例如log4net http://logging.apache.org/log4net/index.html and elmah http://code.google.com/p/elmah/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)