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. DDR3(3):写控制

    调取的 DDR3 控制器给用户端预留了接口,用于实现对该 IP 核的控制,本篇介绍一下 DDR3 IP核写.在生成 DDR3 IP 核的界面中,可以找到 User Guide 手册,DDR3 的使用将 ...

  2. SQL系列(十)—— 联结(join)

    在数据库设计中,基本上都是根实体ER关系和范式设计多张表.这样更能设计出更合理.紧凑的表结构,提高有效数据存储,数据的管理维护更简便,也提高了库表的伸缩性. 但是事物总是平衡的,在很多场景中单张表的数 ...

  3. MQTT --- 操作行为

    会话状态 为实现QoS等级1和QoS等级2协议流,客户端和服务端需要将状态与客户标识符相关联,这被称为会 话状态.服务端还将订阅信息存储为会话状态的一部分.会话可以跨越一系列的网络连接.它持续到最新的 ...

  4. NETCore使用带有权限验证的Swagger

    原文:NETCore使用带有权限验证的Swagger 文章目录 Swagger 什么是Swagger NuGet安装 Startup注册Swagger 设置默认首页打开Swagger 为接口添加注释 ...

  5. Android开发DDMS找不到Emulator Control的方法

    1.右键DDMS,点击reset. 2.window->show view->other->android->Emulator Control

  6. Java自学-类和对象 传参

    Java中的传参 变量有两种类型 基本类型 和类类型 参数也是变量,所以传参分为 基本类型传参 类类型传参 步骤 1 : 基本类型传参 基本类型传参 在方法内,无法修改方法外的基本类型参数 publi ...

  7. Springboot 基于的SAP项目环境配置

    做SAP开发,感觉最难的莫过于前期的环境了,也就是说让程序能跑起来.. 最重要的有三个文件(较新版本,jco lib版本721.800) 下载libsapjco3.so.sapjco3.dll.sap ...

  8. vue 实现 rem 布局的 或者 vw 布局的方法

    vue 实现 rem 布局的 或者 vw 布局的方法 一.实现 rem 布局 移动端 <meta name="viewport" content="width=de ...

  9. 49.react中使用less

    1.安装less:npm install less less-loader --save 2.webpack.config.js中配置: oneOf: [ {   test: /\.less$/,   ...

  10. mongo数据库的一些命令(对于新同学,按照我的步骤连一遍即可)

    进入mongo mongo 查看数据库 show dbs;/show databases(); 第一个命令简单(admin和local数据库是系统自带的) 进入/创建数据库 use 数据库名字(如果有 ...