Windows错误报告是更新的Windows XP上Dr.Watson的替代品。它监视故障并收集可以发送到要分析的服务器(如果用户允许)的有用信息。这项功能帮助微软修复了很多错误——由于收到的报告,微软能够对错误进行优先排序(基于最大点击数或其他严重性度量),并解决了很多问题。真正酷的是,任何开发人员都可以为其产品请求报告。来自PDC 2003的Bill Gates:“每当应用程序或系统出现故障时,您就能够将报告发送回Microsoft。我们得到了很多这样的报告,我们已经创建了非常好的数据管理系统来查看这些东西,从而了解哪些驱动程序是不可靠的。我们允许任何在Windows上运行应用程序的人注册并获取与其应用程序相关的报告,而且我们还有winqual.microsoft.com,人们可以在这里完成这项工作。”

以下是WER的工作原理:当进程崩溃时,WER收集数据并将其发送到服务器(如果用户允许;默认情况下,WER请求同意)。对于非Microsoft程序,此服务器是Winqual(Windows质量联机服务)。在服务器端:基于崩溃的参数,创建一个bucket来保存新的错误,或者将报告添加到已经存在的bucket中(这意味着以前有人遇到过这个问题)。开发人员可以分析故障;如果根据收集的数据找不到解决方案,他/她可以请求其他信息(转储、注册表项值等)。此外,他/她还可以添加一条解释失败的消息。当同一类型崩溃的实例发生时,服务器将显示开发人员设置的消息,并在必要时要求提供附加信息。如果开发人员找到一个解决方案,在下一次崩溃时,服务器可以提供解决方案(见下图)。阅读有关错误报告收集和分类的详细信息

在Vista和更高版本上,程序崩溃的用户可以转到“控制面板”->“问题报告和解决方案”(启动wercon.exe),查看机器上发生了什么故障。

在这里,您可以检查解决方案并查看已识别的问题

您可以查看每个问题的参数,并查看对报表进行分类的bucket。

作为开发人员,您可以转到Winqual并注册以接收失败报告。但还有其他方法可以利用WER。您可以将WER配置为将报告发送到您的一个服务器,这样您就可以直接查看它们。例如,假设您有两台要监视的机器。您可以使用System Center Operations Manager(SCOM)和Agentless错误监视(AEM)将所有报告传输到监视服务器,而不是发送到Winqual。您甚至不必使用Active Directory集成和组策略,但可以手动配置WER注册表项来指定CorporateWERServer(使用您喜欢的端口和安全选项)。

另一种利用WER的方法是在本地保存报告。在本文的其余部分中,我假设WER是enables(默认设置)。

正如我所说,WER试图收集尽可能少的数据,并要求更多只有在必要时。但是可以配置此行为。如果需要在每次崩溃时收集转储,可以将HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting\ForceQueue设置为1(或将HKLM\Software\Microsoft\Windows\Windows Error Reporting\ForceQueue设置为1,以全局应用设置)。这将强制生成转储并包含在报表中。报表通常保存在%localAppData%\Microsoft\Windows\WER的两个目录中:ReportArchive(当服务器可用时)或ReportQueue(当服务器不可用时)。从这里,数据被传输到服务器。查看生成的报告内容的另一种方法是使用wercon.exe(如上所述)。如果您想在本地保持数据,只需将服务器设置为一个非现有的机器(HKEY-LoalAlxMault\Studio\\微软\Windows \Windows错误报告\CytAtWiServer=Nosiver Server)。

现在如果你想在不同的情况下生成崩溃的报告呢?可能您正在监视事件日志或某些性能计数器(如CPU或内存),并希望查看违反条件时会发生什么。或者您希望生成的数据不仅仅是转储(例如,您的应用程序有一个要保存的跟踪文件,或者您希望复制事件日志条目等)?好吧,你很幸运,因为WER有你可以使用的API。使用此API,只要满足所需条件,就可以:

  • 使用WerReportCreate创建报表
  • 使用WerReportAddDump进行转储
  • 使用WerReportAddFile添加其他感兴趣的文件
  • 最多设置10个参数,可用于对故障进行分类(故障程序、故障函数、堆栈跟踪,以及您认为有助于调查此问题的任何参数)
  • 关闭并与WerReportSubmit一起提交报告

有一件事你必须记住,那就是WerReportAddDump在进行转储时会一个接一个地挂起线程。这无法确保内存视图的一致性—一个线程可以挂起,然后当下一个线程挂起时,可能会更改内存或造成其他损坏;如果应用程序有很多线程,这尤其麻烦。如果需要一致的视图,您有责任挂起所有线程。另外,最好在进程外调用此函数。
好的,现在您知道了如何使用WER在发生故障时始终生成转储,将报告发送到您指定的服务器或在本地对其进行排队,并生成自定义报告。希望您会发现这些信息对调试和监视与应用程序相关的问题很有用。

面向开发人员的Windows错误报告(WER)的更多相关文章

  1. IE调试网页之四:F12 开发人员工具控制台错误消息 (Windows)(转载)

    F12 工具控制台可以报告在运行时期间发生的错误和信息消息.本文将介绍错误消息,并提供有关如何修正这些错误的建议. 简介 F12 工具控制台错误消息提供了一些代码(例如,SEC7111 或 HTML1 ...

  2. PX4/Pixhawk---高速成为开发人员(Windows)

    1 高速成为开发人员新手教程(翻译)---官方 1.1 编译环境之版本号控制系统 (1)安装MSysGIT 安装完毕后,配置GIT. 安装注意     安装过程中除了以下一步外,其它的步骤都採用默认安 ...

  3. 系统队列中的Windows错误报告

  4. [转载]Windows系统的错误报告保存在哪个文件夹里?

    转自:http://www.xitonghe.com/jiaocheng/xp-786.html   Windows系统的错误报告保存在哪个文件夹里? 发布时间:2014-10-31 20:52:20 ...

  5. 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序

    原文 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 Jim ...

  6. 提供给Android和iOS开发人员的UWP移植向导

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:前几天微软发布了一个针对Android和iOS开发人员理解Windows Apps概念 ...

  7. Web开发人员常犯的10个错误

    说到开发一个运行在现代网络中的网站:Web开发人员需要选择虚拟主机平台和底层数据存储,准备编写HTML.CSS和JavaScript用的工具,要有设计执行方式,以及一些可用的JavaScript库/框 ...

  8. F12 开发人员工具中的控制台错误消息

    使用此参考解释显示在 Internet Explorer 11 的控制台 和调试程序中的错误消息. 简介 使用 F12 开发人员工具进行调试时,错误消息(例如 EC7111 或 HTML1114)将显 ...

  9. 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序

    面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序 Ajax 为更好的 Web 应用程序铺平了道路 在 Web 应用程序开发中,页面重载循环是最大的一个使用障碍,对于 Java™ ...

随机推荐

  1. Ubuntu18 安装搭建Harbor

    1.安装docker-compose1.下载docker-compose的最新版本 sudo curl -L "https://github.com/docker/compose/relea ...

  2. Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题

    Spring AOP底层的动态代理实现有两种方式:一种是JDK动态代理,另一种是CGLib动态代理. JDK动态代理 JDK 1.3版本以后提供了动态代理,允许开发者在运行期创建接口的代理实例,而且只 ...

  3. 【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计+JSON查询

    mybatis实现 主从表 left join  1:n 一对多 分页查询   主表从表都有查询条件+count 需求: ======================================= ...

  4. SAP销售订单需求类型的确定优秀级

    需求类型的确定优秀级:1.策略组里的需求类型:2.MRP组里的:3.SO行项目类别+MRP类型4.SO行项目类别 部分截图:

  5. FFMPEG SDK 开发介绍(原创)

    来源:http://blog.sina.com.cn/s/blog_62a8419a01016exv.html 本文是作者在使用ffmpeg sdk开发过程中的实际经验,现在与大家分享,欢迎学习交流. ...

  6. I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2

    遇到了这个问题,意思是你的 CPU 支持AVX AVX2 (可以加速CPU计算),但你安装的 TensorFlow 版本不支持 解决:1. 如果是初学者 或者 没有太大计算速度的需求,在开头加上这两行 ...

  7. mysql修改密码策略

      版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Hello_World_QWP/arti ...

  8. Prometheus学习笔记(2)Prometheus部署

    目录 Prometheus的安装配置启动 Prometheus的安装配置启动 1.Prometheus二进制安装 Prometheus下载链接:https://prometheus.io/downlo ...

  9. 百度地图公交线路查询,并绘制到地图上并获取所有路径经纬度点(可供echarts 路径图使用)

    github地址 https://github.com/a1115040996/MyHTML/tree/gh-pages/BDMap 源代码 <!DOCTYPE html PUBLIC &quo ...

  10. C语言printf函数转换说明表及其修饰符表

    请求printf()函数打印数据的指令要与打印数据的类型匹配. 例如, 打印整数时使用%d, 打印字符是使用%c. 这些符号被称为转换说明, 他们指定了数据转换称可显示的形式. 1. ANSI C标准 ...