面向开发人员的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_USERSoftwareMicrosoftWindowsWindows Error ReportingForceQueue設置為1(或將HKLMSoftwareMicrosoftWindowsWindows Error ReportingForceQueue設置為1,以全局應用設置)。這將強制生成轉儲并包含在報表中。報表通常保存在%localAppData%MicrosoftWindowsWER的兩個目錄中:ReportArchive(當服務器可用時)或ReportQueue(當服務器不可用時)。從這里,數據被傳輸到服務器。查看生成的報告內容的另一種方法是使用wercon.exe(如上所述)。如果您想在本地保持數據,只需將服務器設置為一個非現有的機器(HKEY-LoalAlxMaultStudio\微軟Windows Windows錯誤報告CytAtWiServer=Nosiver Server)。
現在如果你想在不同的情況下生成崩潰的報告呢?可能您正在監視事件日志或某些性能計數器(如CPU或內存),并希望查看違反條件時會發生什么。或者您希望生成的數據不僅僅是轉儲(例如,您的應用程序有一個要保存的跟蹤文件,或者您希望復制事件日志條目等)?好吧,你很幸運,因為WER有你可以使用的API。使用此API,只要滿足所需條件,就可以:
使用WerReportCreate創建報表
使用WerReportAddDump進行轉儲
使用WerReportAddFile添加其他感興趣的文件
最多設置10個參數,可用于對故障進行分類(故障程序、故障函數、堆棧跟蹤,以及您認為有助于調查此問題的任何參數)
關閉并與WerReportSubmit一起提交報告
有一件事你必須記住,那就是WerReportAddDump在進行轉儲時會一個接一個地掛起線程。這無法確保內存視圖的一致性—一個線程可以掛起,然后當下一個線程掛起時,可能會更改內存或造成其他損壞;如果應用程序有很多線程,這尤其麻煩。如果需要一致的視圖,您有責任掛起所有線程。另外,最好在進程外調用此函數。
好的,現在您知道了如何使用WER在發生故障時始終生成轉儲,將報告發送到您指定的服務器或在本地對其進行排隊,并生成自定義報告。希望您會發現這些信息對調試和監視與應用程序相關的問題很有用。
總結
以上是生活随笔為你收集整理的面向开发人员的Windows错误报告(WER)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PostgreSQL的架构
- 下一篇: php数组的定义、php数组的类型