Windows 2000/XP/Server 2003 和 Windows Vista 系統的藍屏死機故障是很多人心中永遠的痛。一旦 Windows 出現了藍屏死機,面對屏幕上有如天書一般的錯誤代碼,往往令人一籌莫展。如果遇到了藍屏死機,我們首先可以根據屏幕顯示的藍屏錯誤提示代碼初步判斷故障原因。微軟 KB 知識庫文章為我們列出了一些常見藍屏錯誤提示的原因,例如 0x000000D1 錯誤,通常是由硬件設備驅動程序配置不當引起的;0x000000EA 錯誤,通常與顯卡顯示器設置不當有關,等等。但是,如果在微軟知識庫中找不到有關藍屏錯誤提示的說明,我們應該如何了解故障原因呢?
為了幫助我們分析藍屏死機的觸發原因,Windows 2000/XP/Server 2003 和 Windows Vista 系統均為我們提供了保存內存轉儲文件(Crash Dump File)的功能。我們可以在 Windows 中進入控制面板、打開“系統”屬性、切換到“高級”選項卡、然後打開“啟動和故障恢復”選項,在“寫入調試信息”下面選擇“小內存轉儲(64KB)”、“核心內存轉儲”或“核心內存轉儲”,以便在發生藍屏死機時自動保存內存轉儲文件,這樣我們就可以根據 Windows 在藍屏死機時記錄的內存轉儲文件判斷故障原因了。如附件的截圖所示。
內存轉儲文件是一個擴展名為 .DMP 的文件。其中,“小內存轉儲”文件保存在 Windows\Minidump 文件夾中,文件大小為 64KB,它只記錄有發生藍屏死機時的關鍵信息;“核心內存轉儲”及“完全內存轉儲”文件則保存在 Windows 文件夾中,文件名為 MEMORY.DMP,它們分別記錄有發生藍屏死機時的核心內存信息和完整的內存信息。為了節省硬盤空間,通常我們可以選擇“小內存轉儲”。
那麼,我們應如何通過 .DMP 內存轉儲文件分析藍屏死機的故障原因呢?這可以借助微軟官方提供的 Debugging Tools for Windows 工具實現。我們可以到微軟官方網站的如下地址:
適用系統:32-bit or 64-bit Microsoft Windows Server 2003, 32-bit or 64-bit Windows XP, Windows 2000, Windows NT 4.0, Windows Vista, or Windows Server 2008。
下載 Debugging Tools 進行安裝,然後啟動 Debugging Tools,在程序主菜單中選擇“File(文件)”-“Open Crash Dump(打開內存轉儲文件)”,打開 .DMP 內存轉儲文件即可。Debugging Tools 可以自動為我們分析內存轉儲文件在藍屏死機時記錄的內存信息,並從中分析可能的故障原因。
圖1 Debugging Tools 安裝界面
例如,曾經有一台 Windows XP 計算機經常發生錯誤代碼為 0x0000007F 的藍屏故障,原因未知。為了調查故障原因,筆者在 Windows XP 中設置了保存“小內存轉儲文件(64KB)”。當計算機再次發生了 0x0000007F 藍屏故障、在重新啟動 Windows 後,使用 Debugging Tools 打開了這台計算機保存於 Windows\Minidump 文件夾中的 .DMP 內存轉儲文件,Debugging Tools 經過自動分析後彈出了一份分析報告,報告這個錯誤“Probably caused by TM_CFW.SYS(可能是由 TM_CFW.SYS 文件引起的)”。原來,TM_CFW.SYS 位於 %SystemRoot%\system32\drivers 文件夾,它是趨勢的防火牆程序,用於將趨勢防火牆以系統服務的形式隨 Windows 啟動一同加載。經過回憶,這台計算機正是在修改了趨勢防火牆程序的設置後經常出現 0x0000007F 藍屏錯誤的。因此,趨勢防火牆很可能出現了設置不當的問題。為了證實這一猜想,筆者在 Windows XP 中通過“控制面板”-“添加刪除程序”卸載了趨勢防火牆,然後按照默認設置重新安裝了一遍,果然問題得以解決。