Windows錯誤報告

**Windows 錯誤報告（WER）** （代號為 Watson）是 Microsoft 在 Windows XP 中引入的崩潰報告技術，此技術在之後的 Windows 和 Windows Mobile5.0 和 6.0 中均被包含使用。雖然代號為 Watson，但請不要與 Dr. Watson 調試工具相混淆，該工具會將記憶體內容轉儲至使用者的本地計算機設備上，Windows 錯誤報告會收集並提供使用網路向 Microsoft 發送發生錯誤之後的調試訊息（記憶體內容轉儲）或停止響應的使用者桌面。未經使用者許可，不會發送任何數據。當轉儲訊息（或者其他錯誤簽名訊息）發送至 Microsoft 伺服器時，Microsoft 伺服器將對訊息進行分析處理，並在有可行解決方案時將方案返送會使用者。使用 Windows 錯誤報告來響應提供解決方案。Windows 錯誤報告作為一個 Windows 服務而運行，使用者可以選擇完全禁用。如果 Windows 錯誤報告本身崩潰，則作業系統會無法發送原始崩潰進程產生的錯誤報告。

## 歷史

#### Windows XP

Microsoft 首次在 Windows XP 中引入了 Windows 錯誤報告。

#### Windows Vista

Windows Vista 中的 Windows 錯誤報告得到了顯著改善。最重要的是，在此功能上創建了一組新的公共 API，用於報告除應用程序崩潰和掛起之外的其他故障。開發人員可以創建自定義報告並自定義報告用戶界面。在 MSDN 中也記錄了這些新的 API。Windows 錯誤報告的體系結構在改進之後，變得重點關注可靠性和使用者體驗。而且 WER 在即使進程處於非常糟糕的狀態下也可以報告相關錯誤了。例如在進程遇到堆棧耗盡，PEB / TEB 損壞的情況下。堆損壞在 Windows Vista 之前的早期作業系統中，該過程通常以靜默方式終止，而不會在這些條件下生成錯誤報告。除此以外，在修改中還引入了一個新的控制面板小程序「問題報告和解決方案」，用於記錄系統和應用程序錯誤和問題，並提出可能的問題解決方案。

#### Windows 7

問題報告和解決方案控制面板小程序已替換為 Windows 7 和 Server 2008 R2 上 Windows 操作中心的「維護」部分。

新的應用程序問題步驟記錄器（PSR.exe）可用於 Windows 7 的所有版本，並且可以在遇到崩潰時收集用戶執行的操作，以便測試人員和開發人員可以重現該情況以進行分析和調試。

## 系統設計

WER 是一個分佈式系統。客戶端軟體檢測錯誤情況，生成錯誤報告，標記存儲堆，並將錯誤報告給 WER 服務。WER 服務記錄錯誤發生，然後，根據已知的特定錯誤信息，可能會從客戶端請求其他數據，或將客戶端指向解決方案。程式設計師可以訪問 WER 服務以檢索特定錯誤報告和基於統計的調試的數據。

WER 客戶收集的錯誤將發送到 WER 服務。WER 服務使用大約 60 台服務器連接到 65TB 存儲區域網絡，該網絡存儲錯誤報告資料庫和 120TB 存儲區域網絡，可存儲長達 6 個月的原始 CAB 文件。該服務被配置為每天接收和處理超過一億個錯誤報告，這足以使諸如因特網蠕蟲之類的相關全局事件存活下來。

## Buckets

在 Microsoft Windows 錯誤報告（WER）系統中，根據「存儲桶」組織崩潰報告。Buckets 會按以下方式對問題進行分類：

* 應用名稱
* 應用版本
* 申請建設日期
* 模塊名稱
* 模塊版本
* 模塊構建日期
* 作業系統異常代碼 / 系統錯誤代碼
* 和模塊代碼偏移

理想情況下，每個存儲桶都包含由同一個錯誤引起的崩潰報告。然而，在 WER 劃分中存在兩種形式的弱點：冷凝啟發式的弱點，這導致將報告從錯誤映射到太多桶中。例如，如果您再次編譯應用程序而沒有任何更改，則模塊構建日期將發生更改，同樣的崩潰將被置於另一個存儲桶中。擴展啟發式方法的弱點，導致將多個錯誤映射到同一個存儲桶中。例如，如果兩個不同的錯誤在 strlen 函數內崩潰，由於它們均使用了損壞的字符串叫用，所以兩者只會有一個存儲桶。發生這種情況是因為在 Windows OS 客戶端上生成存儲桶而不對內存轉儲執行任何符號分析。Windows 錯誤報告客戶端選擇的模塊是堆棧頂部的模塊。對許多報告的調查導致故障模塊與原始桶確定存在了不同。

## 第三方軟體

軟體和硬體製造商可以使用 Microsoft 的 Windows 開發人員中心硬體和桌面儀錶板（之前被稱為 Winqual）程式訪問其錯誤報告。為了確保錯誤報告數據僅發送給負責產品的工程師，Microsoft 要求感興趣的供應商獲得 VeriSign Class 3 Digital ID 或 DigiCert 證書。由更便宜的提供商頒發的數字證書（如 Thawte，Comodo，GlobalSign，GeoTrust，Cybertrust，Entrust，GoDaddy，QuoVadis，Trustwave，SecureTrust，Wells Fargo）不被接受。

軟體和硬體製造商還可以通過將錯誤簽名鏈接到 Windows 錯誤報告響應來關閉與客戶的循環。這允許分發解決方案以及從客戶收集額外信息（例如重現他們在崩潰之前採取的步驟）並為他們提供支持的鏈接。

## 未來對軟體的影響

微軟報告稱，從 Windows 錯誤報告收集的數據對內部開發軟體的方式產生了巨大影響。例如，在 2002 年，史蒂夫鮑爾默指出，錯誤報告使 Windows 團隊能夠修復 Windows XP SP1 中所有 Windows XP 錯誤的 29％。使用 Office XP SP2 修復了超過一半的 Microsoft Office XP 錯誤。成功的部分是以 80/20 規則判定的。錯誤報告數據顯示，只有一小部分的錯誤導致了使用者可以看到的絕大多數問題。修復 20％的代碼缺陷可以消除 80％或更多用戶遇到的問題。紐約時報的一篇文章確認錯誤報告數據有助於解決 Windows Vista 和 Microsoft Office 2007 測試版中出現的問題。

## NSA 的隱私問題與使用

儘管 Microsoft 已經提供了隱私保護，但他們承認，個人身份信息可能包含在內存和應用程序數據中，這些數據是在 Windows 錯誤報告編譯並發送回 Microsoft 的 100-200 KB「minidumps」中編譯的。根據微軟的隱私政策，他們堅持認為，如果將個人數據發送給微軟，它將不會用於識別用戶。但在向微軟報告問題時，用戶也需要信任微軟的合作夥伴。就目前已授予約 450 個合作夥伴訪問錯誤報告資料庫的權限，以查看與其設備驅動程序和應用程序相關的記錄。

較舊版本的 WER 在沒有加密的情況下發送數據；只有 Windows 8 的 WER 使用 TLS 加密。2014 年 3 月，微軟發布了針對 Windows Vista，7 和 Server 2008 的更新（KB2929733），用於加密 WER 的第一階段。

2013 年 12 月，一家獨立實驗室發現，當新的 USB 設備插入 PC 時，WER 會自動向 Microsoft 發送信息。

根據 Der Spiegel 的說法，微軟崩潰記者被美國國家安全局的 TAO 部門利用入侵墨西哥公安秘書處的計算機。根據相同的消息來源，Microsoft 崩潰報告會在 NSA 的 XKeyscore 資料庫中自動收集，以便於此類操作。

## 參考文獻