Process Dumper - 為異常關(guān)閉的進(jìn)程保存轉(zhuǎn)儲(chǔ)文件

2009/8/15 11:08:34    編輯:Windows7之家 - Mary Jane     字體:【

Win7之家afsion.com.cn):Process Dumper - 為異常關(guān)閉的進(jìn)程保存轉(zhuǎn)儲(chǔ)文件

在 Windows 系統(tǒng)的“啟動(dòng)與故障恢復(fù)”中設(shè)置“寫入調(diào)試信息”,以便在 Windows 遇到藍(lán)屏故障后通過(guò) Debugging Tools for Windows 分析藍(lán)屏?xí)r自動(dòng)保存的內(nèi)存轉(zhuǎn)儲(chǔ)文件(Crash Dump File)以排查藍(lán)屏故障原因的方法相信很多人都非常熟悉了。詳細(xì)介紹可以參考《Windows 常見(jiàn)藍(lán)屏故障分析》。

除 了 Windows 藍(lán)屏故障以外,很多應(yīng)用程序進(jìn)程異常關(guān)閉或停止響應(yīng)的軟件故障也可以通過(guò)分析轉(zhuǎn)儲(chǔ)文件加以排查。Windows 沒(méi)有直接提供為應(yīng)用程序保存轉(zhuǎn)儲(chǔ)文件的功能,我們可以在微軟官方網(wǎng)站下載 User Mode Process Dumper 8.1(以下簡(jiǎn)稱為 UserDump):

http://www.microsoft.com/downloads/details.aspx?FamilyID=E089CA41-6A87-40C8-BF69-28AC08570B7E&displaylang=en&displaylang=en


此工具可以監(jiān)視運(yùn)行中的 Win32 進(jìn)程并為其保存轉(zhuǎn)儲(chǔ)文件,不會(huì)附加調(diào)試器或中止進(jìn)程,而且可以監(jiān)控 CSRSS.EXE、SERVICES.EXE、WINLOGON.EXE 之類系統(tǒng)核心進(jìn)程。下載后運(yùn)行 SETUP.EXE,安裝內(nèi)核模式驅(qū)動(dòng)程序 USERDUMP.SYS、添加 USERDUMP 系統(tǒng)服務(wù)并在控制面板中生成 Process Dump 圖標(biāo)。注意在安裝時(shí)要選擇“Enable Dump on Process Termination Feature”復(fù)選框。

如果某應(yīng)用程序進(jìn)程經(jīng)常異常關(guān)閉,我們可以雙擊控制面板中的 Process Dump 圖標(biāo),在 Process Monitoring 選項(xiàng)卡中點(diǎn)擊“New(新建)”,然后輸入需要監(jiān)控的進(jìn)程名稱,無(wú)需輸入進(jìn)程完整路徑。接下來(lái)點(diǎn)擊“Rules(規(guī)則)”按鈕,為監(jiān)控的進(jìn)程選擇錯(cuò)誤類型 規(guī)則,在此可以選擇“Select All(選擇所有)”,這樣當(dāng)進(jìn)程觸發(fā)了規(guī)則中的任一條錯(cuò)誤類型規(guī)則后,UserDump 都會(huì)自動(dòng)保存轉(zhuǎn)儲(chǔ)文件。我們?cè)诖诉可以設(shè)置轉(zhuǎn)儲(chǔ)文件的保存位置,默認(rèn)是 Windows 文件夾,建議修改為其它位置。
 
如果某應(yīng)用程序進(jìn)程在運(yùn)行時(shí)停止了響應(yīng),我們可以首先通過(guò)任務(wù)管理器記下此進(jìn)程的 PID,然后以命令行方式執(zhí)行 UserDump.EXE <PID> 命令以生成轉(zhuǎn)儲(chǔ)文件。
 
應(yīng)用實(shí)例:
 
筆者曾經(jīng)在 Windows 中運(yùn)行《恐龍危機(jī) II》游戲時(shí)遇到游戲主進(jìn)程 Dino2.EXE 異常關(guān)閉的問(wèn)題。游戲雖然可以正常載入并在大部分場(chǎng)景中正常運(yùn)行,但在進(jìn)入 Regina 與 Dylan 交替掩護(hù)闖異特龍巢穴的特定關(guān)卡中,只要一發(fā)射信號(hào)彈就肯定會(huì)“Dino2.EXE 遇到了問(wèn)題需要關(guān)閉”。經(jīng)檢查,游戲的所有程序文件都沒(méi)有損壞,經(jīng)卸載重裝游戲后問(wèn)題依舊。于是筆者用 UserDump 設(shè)置了監(jiān)控 Dino2.EXE 進(jìn)程,重新運(yùn)行游戲后,UserDump 檢測(cè)到活動(dòng)的 Dino2.EXE 進(jìn)程并自動(dòng)監(jiān)控其狀態(tài),當(dāng)游戲異常關(guān)閉后,相應(yīng)的轉(zhuǎn)儲(chǔ)文件也保存好了。經(jīng)過(guò)分析轉(zhuǎn)儲(chǔ)文件得知,Dino2.EXE 在那個(gè)特定的關(guān)卡中加載 D3DIM.DLL 時(shí)遇到了問(wèn)題,D3DIM.DLL 是一個(gè) DirectX 文件,那個(gè)特定關(guān)卡中的信號(hào)彈是需要經(jīng)過(guò)特定 Direct3D 渲染的,因此才會(huì)出現(xiàn)游戲可以正常載入、但只要一在那個(gè)特定關(guān)卡發(fā)射信號(hào)彈就異常關(guān)閉的問(wèn)題。了解故障原因后,筆者嘗試重新安裝顯示驅(qū)動(dòng)程序及 DirectX 運(yùn)行時(shí)組件以修復(fù) Direct3D 設(shè)置,重新運(yùn)行游戲后問(wèn)題得以解決。

文/ alx-zj