WinDbg是微軟發(fā)布的一款相當(dāng)優(yōu)秀的源碼級(source-level)調(diào)試工具,可以用于Kernel模式調(diào)試和用戶模式調(diào)試,還可以調(diào)試Dump文件。它能夠通過dmp文件輕松的定位到問題根源,可用于分析藍(lán)屏、程序崩潰(IE崩潰)原因,是我們?nèi)粘9ぷ髦斜夭豢缮俚囊粋有力工具,學(xué)會使用它,將有效提升我們的問題解決效率和準(zhǔn)確率。
在DotNet方面WinDbg是調(diào)試分析SSCLI的最佳工具,同時可以和SOS擴展一起調(diào)試分析.net程序。
配置WinDbg:
運行WinDbg->菜單->File->Symbol File Path->按照下面的方法設(shè)置_NT_SYMBOL_PATH變量:
在彈出的框中輸入“C:\MyCodesSymbols; SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols”(按照這樣設(shè)置,WinDbg將先從本地文件夾C:\MyCodesSymbols中查找Symbol,如果找不到,則自動從MS的Symbol Server上下載Symbols)。另一種做法是從這個Symbol下載地址中http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx,下載相應(yīng)操作系統(tǒng)所需要的完整的Symbol安裝包,并進(jìn)行安裝,例如我將其安裝在D:\WINDOWS\Symbols,在該框中輸入“D:\WINDOWS\Symbols”。(這里要注意下載的Symbols的版本一定要正確,在我的Win2003+Sp1上,我曾經(jīng)以為安裝Win2003+Sp2的Symbols可能會牛×點,但結(jié)果證明我錯了,用WinDbg打開可執(zhí)行文件時,提示“PDB symbol for mscorwks.dll not loaded;Defaulted to export symbols for ntdll.dll”的錯誤,我有重新裝上Win2003+Sp1的Symbols, 現(xiàn)在一切運行正常^_^)
使用WinDbg:
WinDbg提供了圖形界面和命令行兩種運行方式。這里介紹使用圖形界面的WinDbg來調(diào)試應(yīng)用程序:
File->OpenExecutable->可以選擇一個可執(zhí)行文件進(jìn)行調(diào)試;
File->Attache to a Process->可以選擇一個運行中的進(jìn)程,并對其進(jìn)行調(diào)試;
至此,我們就可以在上圖中用紅色方框標(biāo)記的文本框中輸入各個功能指令了(有關(guān)指令的幫助文檔,可以參考:Help->Contents->Debugging Tools for Windows->Debuggers->Debugger Reference,該目錄下列集了所有指令機器功能說明!)。
分析一些dmp文件:
分享一個8E藍(lán)屏dmp案例的分析過程:
當(dāng)你打開一個dmp文件后,可能因為太多信息,讓你無所適從,不過沒關(guān)系,我們只需要關(guān)注幾個關(guān)鍵信息即可。
第一個關(guān)鍵信息:System Uptime(開機時間):
通過觀察這個時間你就可以知道問題是在什么時候出現(xiàn)的,例如時間小于1分鐘基本可以定位為開機藍(lán)屏,反之大于一分鐘則可證明是上機后或玩的過程中出現(xiàn)問題了。
接下來用一個簡單的例子來學(xué)習(xí)簡單的dmp分析,下圖中System Uptime: 0 days 0:14:23.581,意思是0天(days)0小時14分23秒581毫秒時出現(xiàn)藍(lán)屏了,看來是上機沒多久就藍(lán)屏了,這位顧客很悲催……
那么是什么導(dǎo)致藍(lán)屏的呢?接下來我們就要注意第二個關(guān)鍵信息了!
第二個關(guān)鍵信息:Probaly caused by(造成藍(lán)屏可能的原因)
這個信息是相對比較重要的一個信息,如果你運氣好的話,通過這個信息基本上可以看到導(dǎo)致藍(lán)屏的驅(qū)動或者程序名稱了,就像下圖一樣,初步的分析已經(jīng)有了結(jié)果,Probaly caused by后面顯示的是一個名為KiMsgProtect.sys的驅(qū)動文件導(dǎo)致藍(lán)屏,這個文件就是恒信一卡通的一個關(guān)鍵驅(qū)動。因此藍(lán)屏則很有可能和一卡通有關(guān)。
括號中驅(qū)動文件名后面的+號代表的是偏移地址,假如多個dmp文件的驅(qū)動文件名一樣,且偏移地址也一樣,則問題原因極有可能是同一個,這個偏移地址與匯編有關(guān),這里不多做介紹。
其實,對于分析藍(lán)屏dmp并不是每次運氣都那么好,假如剛剛打開dmp文件未看到明確的藍(lán)屏原因時,我們就需要借助一個命令來進(jìn)一步分析dmp,這個命令就是:!analyze -v,這個命令能夠自動分析絕大部分藍(lán)屏原因。當(dāng)初步分析沒有結(jié)果時,可以使用該命令進(jìn)一步分析故障原因,當(dāng)然你也可以直接點擊鏈接樣式的!analyze -v來進(jìn)行執(zhí)行該命令,為了讓大家更直觀的看懂里面的信息,大家可以直接看圖片中的注釋信息。
看了這么多信息之后,這個藍(lán)屏dmp到底是怎么回事呢?根據(jù)dmp給出的信息,應(yīng)該是:顧客上機0天(days)0小時14分23秒581毫秒時,一個名為PinyinUp.exe觸發(fā)了KiMsgProtect.sys這個驅(qū)動的一個Bug,導(dǎo)致藍(lán)屏。
那么PinyinUp.exe和KiMsgProtect.sys都是哪個廠商的?一般要知道這個信息,只能去用戶的機器上找了,我去找了之后發(fā)現(xiàn)PinyinUp.exe是搜狗輸入法的自動升級程序,KiMsgProtect.sys是恒信一卡通這個計費軟件的驅(qū)動,所以這個dmp表示出來的意思看上去是搜狗拼音和恒信一卡通搞在一起,出了問題!當(dāng)然排除方法很簡單,把搜狗輸入法的自動升級程序刪除掉,再看看是否仍然有藍(lán)屏問題發(fā)生就ok了!
學(xué)到這里,基本上已經(jīng)可以分析絕大部分dmp文件了,但是分析藍(lán)屏dmp要比較謹(jǐn)慎,對信息需要重新驗證一次才更加保險,驗證方法很簡單,在WinDbg的命令輸入框內(nèi),輸入!process命令,就可以驗證觸發(fā)藍(lán)屏的程序到底是否正確了。