WPF 应用程序的异常报告

2024-02-17

在未处理的异常期间,是否有某种方法可以捕获输出并在应用程序崩溃时显示错误报告对话框?


我的想法是在后台运行一个小程序,它唯一的工作就是监听主应用程序的异常退出,然后显示“报告”对话框,用户可以选择通过电子邮件向我发送错误的输出。

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

报告错误消息将是一项简单的任务,但我不知道如何捕获未处理异常的输出或获取退出代码(我假设程序崩溃时会给出除 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(使用前将#替换为@)

WPF 应用程序的异常报告 的相关文章

随机推荐

  • 与 Enterprise Library 4.1 的单声道兼容性

    有人在 mono 中使用最新的企业库 4 1 吗 我使用 Mono 迁移分析器来分析我的 Web 应用程序 并意识到所有企业库 DLL 在 Mono 中都失败了 我需要知道企业库 4 1 与 Mono 2 4 不兼容是真的吗 我有这方面的更
  • C# - 如何解析文本文件(空格分隔的数字)?

    给定一个由空格分隔的数据文件 10 10 10 10 222 331 2 3 3 4 45 4 2 2 4 如何读取该文件并加载到数组中 谢谢 var fileContent File ReadAllText fileName var ar
  • Electron:如何安全地将全局变量注入BrowserWindow / BrowserView?

    我想使用 Electron 加载外部网页BrowserView 它的 API 几乎与BrowserWindow const currentWindow remote getCurrentWindow const view new remot
  • CSS 平铺背景图像的最佳尺寸

    人们经常说 当使用背景图像平铺网页背景时 尺寸较大的图像的性能会更好 因为它需要平铺的频率较低 一段时间以来 我一直将它们设为 8x8 像素 或 8 的倍数 但是是否有人有数据链接来证明在各种浏览器中都是这种情况 考虑渲染时间或页面渲染各个
  • ltrace()如何显示rand()

    当 ltrace 命中 rand 函数时 它会显示 4 个参数 如下所示 兰特 0 0x5649bd4e6010 0x7f0955490760 0x7f09551cf7b0 0x17382962 rand 不接受任何参数 ltrace 这里
  • C/C++向量到Numpy数组的快速转换

    我使用 SWIG 将一些 C 代码粘合到 Python 2 6 并且该粘合的一部分包括一段代码 该代码将大型数据字段 数百万个值 从 C 端转换为 Numpy 数组 我能想到的最好方法是为类实现一个迭代器 然后提供一个 Python 方法
  • Ember.js - 错误 - “断言失败:您必须在传递给‘push’的哈希中包含‘id’”

    通过使用 Express 编写的 REST API 将帖子 标题 文本 保存到 mongodb 数据库并刷新浏览器后 我收到此错误 我已经将主键设置为 id 并且一直在阅读有关可能规范化数据的内容 这是来自服务器的有效负载 数据库中只有 1
  • ESPN Cricinfo 有 API 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Has espncricinfo com http espncricinfo com暴露API 我对实时
  • 如何通过反射从名称获取类型表示?

    有没有办法使用反射库 https golang org pkg reflect 在 Go 中从类型名称转到它的类型Type https golang org pkg reflect Type表示 我有一个库 用户需要为某些代码生成提供类型表
  • TS2304:找不到名称要求和进程

    When I want to start my angular 2 app using npm start I get errors 我从互联网上尝试了很多 解决方案 但没有任何效果 我的版本 npm 4 1 2 打字 2 1 0 节点 7
  • 如何使用 CallKit 进行非 voip 呼叫?

    我想使用新的 iOS 10 CallKit 但使用默认运营商从应用程序拨打电话 是否可以 如果是这样 怎么办 目前使用 public void dial String number NSURL url new NSURL tel numbe
  • iOS:以编程方式检测iOS应用程序安装的来源(在已安装的应用程序内)[重复]

    这个问题在这里已经有答案了 我想知道是否有办法检测用户如何在 AppStore 中找到我的应用程序 例如 如果有一些参数 我可以将其连接到 AppStore 中我的应用程序的 URL 并将其获取到已安装的应用程序中 有可能http itun
  • 搜索“整个解决方案”停止工作

    不知何故 Visual Studio 搜索已停止为我工作 每当我搜索 整个解决方案 中的某些文本时 我都会得到以下结果 查找所有 我正在搜索的内容 子文件夹 查找结果 1 整个解决方案 找不到要查找的匹配文本 查找为 停止进行中 为什么突然
  • Magento 按小数排序属性而不是按字母数字排序

    所以我疯狂地在谷歌上搜索 试图找到一个解决这个问题的方法 该方法实际上可以正常工作 但却空手而归 使用类别页面上的 排序依据 功能按属性 容量 重量等 对产品进行排序时 Magento 像这样排序 因为它认为数字是文本字符串 产品A 10公
  • 无法让 EclipseLink MOXy 工作

    我是 JAXB 新手 我想使用 EclipseLink MOXy 更改默认名称空间前缀 我的 package info java 有以下代码行 javax xml bind annotation XmlSchema namespace ht
  • Chrome自动设置输入格式=数字

    我有一个 Web 应用程序 我使用 HTML5 属性 type number 将输入字段指定为数字
  • 如何将主干视图连接到流星车把模板?

    看起来像 Backbone view meteor 和 handbars 在操作 DOM 的一部分时具有重叠功能 我查看了 ToDo 应用程序 它应该使用 Backbone 但实际上 他们只使用路由器 主干视图也处理模板 但它们听起来与流星
  • 有没有办法限制“git gc”使用的内存量?

    我在共享主机上托管 git 存储库 我的存储库中必然有几个非常大的文件 每次我尝试在存储库上运行 git gc 时 我的进程都会因使用过多内存而被共享托管提供商杀死 有没有办法限制 git gc 可以消耗的内存量 我希望它可以用内存使用来换
  • VB6下载网页源码

    VB6 有没有办法将网页源下载到字符串或文本框 例如 在 VB Net 中 WebClient 类允许您使用 DownloadString google com 执行此操作 我如何在 vb6 中执行相同操作 注意 我想避免使用网络浏览器 我
  • WPF 应用程序的异常报告

    在未处理的异常期间 是否有某种方法可以捕获输出并在应用程序崩溃时显示错误报告对话框 我的想法是在后台运行一个小程序 它唯一的工作就是监听主应用程序的异常退出 然后显示 报告 对话框 用户可以选择通过电子邮件向我发送错误的输出 不太确定如何实