面向开发人员的Windows错误报告(WER)
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)的更多相关文章
- IE调试网页之四:F12 开发人员工具控制台错误消息 (Windows)(转载)
F12 工具控制台可以报告在运行时期间发生的错误和信息消息.本文将介绍错误消息,并提供有关如何修正这些错误的建议. 简介 F12 工具控制台错误消息提供了一些代码(例如,SEC7111 或 HTML1 ...
- PX4/Pixhawk---高速成为开发人员(Windows)
1 高速成为开发人员新手教程(翻译)---官方 1.1 编译环境之版本号控制系统 (1)安装MSysGIT 安装完毕后,配置GIT. 安装注意 安装过程中除了以下一步外,其它的步骤都採用默认安 ...
- 系统队列中的Windows错误报告
- [转载]Windows系统的错误报告保存在哪个文件夹里?
转自:http://www.xitonghe.com/jiaocheng/xp-786.html Windows系统的错误报告保存在哪个文件夹里? 发布时间:2014-10-31 20:52:20 ...
- 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序
原文 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 Jim ...
- 提供给Android和iOS开发人员的UWP移植向导
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:前几天微软发布了一个针对Android和iOS开发人员理解Windows Apps概念 ...
- Web开发人员常犯的10个错误
说到开发一个运行在现代网络中的网站:Web开发人员需要选择虚拟主机平台和底层数据存储,准备编写HTML.CSS和JavaScript用的工具,要有设计执行方式,以及一些可用的JavaScript库/框 ...
- F12 开发人员工具中的控制台错误消息
使用此参考解释显示在 Internet Explorer 11 的控制台 和调试程序中的错误消息. 简介 使用 F12 开发人员工具进行调试时,错误消息(例如 EC7111 或 HTML1114)将显 ...
- 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序
面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序 Ajax 为更好的 Web 应用程序铺平了道路 在 Web 应用程序开发中,页面重载循环是最大的一个使用障碍,对于 Java™ ...
随机推荐
- gevent介绍(转)
原文:https://www.liaoxuefeng.com/wiki/897692888725344/966405998508320 Python通过yield提供了对协程的基本支持,但是不完全.而 ...
- C#读写设置修改调整UVC摄像头画面-焦点
有时,我们需要在C#代码中对摄像头的焦点进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...
- 我的探究:为什么.h头文件中不要写using namespace std
- 【Mysql技术内幕InnoDB存储引擎】读书笔记
一.存储引擎 1.InnoDB引擎 设计目标是面向在线事务(OLTP)处理的应用. 支持事务.行级锁.通过多版本并发控制(MVCC)支持高并发.提供一致性非锁定读.next-key locking避免 ...
- 微信小程序生命周期详解
文章出处:https://blog.csdn.net/qq_29712995/article/details/79784222 在我看来小程序的生命周期虽然简单,但是他渗透了小程序开发的整个过程,对于 ...
- selenium 开启开发者工具(F12)
selenium 开启开发者工具(F12) options = webdriver.ChromeOptions(); options.add_argument("--auto-open-de ...
- 英语chalchite蓝绿松石chalchite单词
蓝绿松石是铜和铝的磷酸盐矿物集合体,以不透明的蔚蓝色最具特色.也有淡蓝.蓝绿.绿.浅绿.黄绿.灰绿.苍白色等色.一般硬度5~6,密度2.6~2.9,折射率约1.62.长波紫外光下,可发淡绿到蓝色的荧光 ...
- 记一则 Lambda内递归调用方法将集合对象转换成树形结构
public dynamic GetDepartments(string labID) { List<int> usedIDs = new List<int>(); //缓存已 ...
- Maven项目中jstl表达式失效
从网上看到的可能原因: 1.包没导入 2.web.xml版本太低,不支持 最后,我一直忽略了的解决办法: 关于jstl和el表达式失效的解决办法 - - ITeye博客 https://aazham. ...
- java String字符串编码类型转换
/** * 前后端数据乱码问题 * 解决办法1: * 乱码原因:一编一解码型不一致导致. * [main description] * @param {[type]} String[] args [d ...