如何處理系統(tǒng)崩潰后的Windows 7
原創(chuàng)【51CTO精選譯文】想準(zhǔn)備使用WindDbg來解決Windows 7系統(tǒng)崩潰,需要一臺(tái)個(gè)人電腦滿足下列要求:
32位或64位Windows 7/Vista/XP或Windows Server 2008/2003
約25MB的硬盤空間(這不包括存儲(chǔ)轉(zhuǎn)儲(chǔ)文件或符號(hào)文件的空間)
正常的互聯(lián)網(wǎng)連接
微軟Internet Explorer 5.0或更高版本
WinDBG的最新版本是Windows SDK中的一個(gè)選項(xiàng)。SDK下載文件名為winsdk web.exe,大小498KB,可以免費(fèi)下載。(注意:安裝調(diào)試器后,可以刪除龐大的下載文件,從而騰出大量空間。)
內(nèi)存轉(zhuǎn)儲(chǔ)(頁面文件必須在C:上,以便Windows保存內(nèi)存轉(zhuǎn)儲(chǔ)文件)
安裝WinDbg
下載Windows SDK、運(yùn)行安裝向?qū)С绦蚝螅x擇Common Utilities(常用實(shí)用程序)下面的Debugging Tools for Windows(Windows調(diào)試工具)選項(xiàng)。
配置啟動(dòng)和恢復(fù)
這一步很煩人。因?yàn)椴惶菀渍业絾?dòng)和恢復(fù)對(duì)話框;為了檢查系統(tǒng)已設(shè)定成在錯(cuò)誤檢查期間采取合適的動(dòng)作,包括要不要自動(dòng)重新啟動(dòng)、保存多少大小的轉(zhuǎn)儲(chǔ)文件,需要這個(gè)對(duì)話框。
找到啟動(dòng)和恢復(fù)對(duì)話框:
1、選擇屏幕左下角的Start(開始)按鈕
2、選擇Control Panel(控制面板)
3、選擇System and Security(系統(tǒng)和安全)
4、從右邊欄的選項(xiàng)中選擇System(系統(tǒng))
5、從左邊欄中選擇Advanced system settings(高級(jí)系統(tǒng)設(shè)置),顯示System Properties(系統(tǒng)屬性)對(duì)話框
6、在系統(tǒng)屬性對(duì)話框中選擇Advanced(高級(jí))選項(xiàng)卡
7、在啟動(dòng)和恢復(fù)區(qū)中選擇Settings(設(shè)置)按鈕
看到如下所示的啟動(dòng)和恢復(fù)對(duì)話框:
確保啟動(dòng)和恢復(fù)設(shè)置是否正確
在System failure(系統(tǒng)故障)下
1、勾選Write an event to the system log(將事件寫入系統(tǒng)日志)
2、勾選Automatically restart(自動(dòng)重新啟動(dòng))
3、選擇Kernel memory dump(核心內(nèi)存轉(zhuǎn)儲(chǔ))
4、確保轉(zhuǎn)儲(chǔ)文件寫入%SystemRoot%\MEMORY.DMP
5、勾選Overwrite any existing file(覆蓋任何現(xiàn)有文件),以節(jié)省硬盤空間
請(qǐng)注意:這將意味著你的系統(tǒng)將既保存內(nèi)核轉(zhuǎn)儲(chǔ)文件,又保存微型轉(zhuǎn)儲(chǔ)文件。然而,盡管你有一個(gè)微型轉(zhuǎn)儲(chǔ)用于每個(gè)事件,但保存的將是最近一個(gè)內(nèi)核轉(zhuǎn)儲(chǔ)。
配置WinDbg
啟動(dòng)調(diào)試器:想啟動(dòng)WinDbg,請(qǐng)依次選擇下列:
Start | All Programs | Debugging Tools for Windows| WinDbg
開始|所有程序| Windows調(diào)試工具|WinDbg
如果你要隨時(shí)使用WindDbg,需要簡(jiǎn)化這個(gè)程序的啟動(dòng):只要把它固定到Startup(啟動(dòng))菜單上,或者發(fā)送快捷方式到桌面上。
符號(hào)有多重要?
在你想找到轉(zhuǎn)儲(chǔ)文件中的某個(gè)異常模塊、急于挽救局面之前,得確保調(diào)試器已準(zhǔn)備就緒。最重要的是,你得確信它會(huì)為你在排除故障的那個(gè)操作系統(tǒng)的確切版本找到符號(hào)文件。
符號(hào)表是編譯后的產(chǎn)物。當(dāng)某個(gè)程序被編譯后,源代碼從一種高級(jí)語言轉(zhuǎn)換成了機(jī)器碼。與此同時(shí),編譯器會(huì)創(chuàng)建一個(gè)符號(hào)文件,帶有標(biāo)識(shí)符列表、標(biāo)識(shí)符在程序中的位置及其屬性。一些標(biāo)識(shí)符是全局和局部變量以及函數(shù)調(diào)用。程序不需要這些信息才能執(zhí)行。因而,信息可以取出來存儲(chǔ)在另一個(gè)文件中,減小了最終可執(zhí)行文件的大小。
與較大的可執(zhí)行文件相比,較小的可執(zhí)行文件占用磁盤空間較少,加載到內(nèi)存的速度較快。但凡事都有另一面:某程序引起問題時(shí),操作系統(tǒng)只知道出現(xiàn)問題的十六進(jìn)制地址。你需要比這更多的信息,才能確定哪個(gè)程序在使用該內(nèi)存空間,它試圖在進(jìn)行什么操作。Windows符號(hào)表就能解答這個(gè)問題,而可以訪問針對(duì)特定系統(tǒng)內(nèi)存的符號(hào)好比將地名加在地圖上。反過來,分析符號(hào)表錯(cuò)誤的轉(zhuǎn)儲(chǔ)文件好比拿著一張波士頓的地圖在舊金山找路。
配置WinDbg以定位符號(hào)
Windows有數(shù)量多得驚人的符號(hào)表文件。之所以這樣,是因?yàn)椴僮飨到y(tǒng)的每個(gè)版本,甚至一次性版本,都會(huì)帶來一個(gè)新文件。幸運(yùn)的是,WinDbg可以為你處理這件事,但必須為它配置正確的搜索路徑。要做到這一點(diǎn),就要啟動(dòng)WinDbg,并依次選擇下列:
File | Symbol file path
文件|符號(hào)文件路徑
然后輸入下列路徑:(確保你的防火墻允許訪問msdl.microsoft.com)
srv*c:\cache*http://msdl.microsoft.com/download/symbols
請(qǐng)注意:星號(hào)之間的地址表明你想把符號(hào)存儲(chǔ)在何處,以便將來訪問。比如說,我把符號(hào)存儲(chǔ)在C:驅(qū)動(dòng)器根目錄下一個(gè)名為symbols的文件夾中,因而:
srv*c:\symbols*http://msdl.microsoft.com/download/symbols
打開內(nèi)存轉(zhuǎn)儲(chǔ)時(shí),WinDbg會(huì)查看可執(zhí)行文件(.exe和.dll等文件),并提取版本信息。然后它會(huì)請(qǐng)求微軟的符號(hào)服務(wù)器,該服務(wù)器包含該版本信息,并找到確切的符號(hào)表,從中獲取信息。它不會(huì)下載你在排除故障的特定操作系統(tǒng)的所有符號(hào),只會(huì)下載需要的符號(hào)。另外,你可以選擇從微軟下載并存儲(chǔ)完整的符號(hào)文件。然而,對(duì)于你在分析的操作系統(tǒng)的每個(gè)版本而言,這個(gè)文件的大小在600MB到800MB之間。相比之下,WinDbg下載的文件不到100MB,即可分析測(cè)試機(jī)上操作系統(tǒng)的好幾個(gè)版本。即使如今硬盤成本很低,節(jié)省的空間還是相當(dāng)大。
關(guān)于轉(zhuǎn)儲(chǔ)文件
內(nèi)存轉(zhuǎn)儲(chǔ)文件是一份快照,表明了系統(tǒng)崩潰時(shí)內(nèi)存里面有什么。雖然內(nèi)存轉(zhuǎn)儲(chǔ)文件也許是你可能需要查看的最乏味、最不直觀的東西,但操作系統(tǒng)崩潰時(shí),它是你最好的朋友。Windows創(chuàng)建了三種不同大小的內(nèi)存轉(zhuǎn)儲(chǔ):微型轉(zhuǎn)儲(chǔ)(minidump)、內(nèi)核轉(zhuǎn)儲(chǔ)(kernel dump)和完全轉(zhuǎn)儲(chǔ)(full dump)。
1、小型轉(zhuǎn)儲(chǔ)或微型轉(zhuǎn)儲(chǔ)
Windows 7微型轉(zhuǎn)儲(chǔ)只有256K字節(jié),不管從哪個(gè)標(biāo)準(zhǔn)來看都很小;然而,它們比Windows 2000/XP時(shí)候大了不少,那時(shí)候只有64K。微型轉(zhuǎn)儲(chǔ)之所以這么小,原因之一是,它們不含有故障出現(xiàn)時(shí),內(nèi)存中的任何二進(jìn)制文件或可執(zhí)行文件。不過,那些文件對(duì)調(diào)試器在之后進(jìn)行分析來說至關(guān)重要。只要你在創(chuàng)建轉(zhuǎn)儲(chǔ)文件的機(jī)器上調(diào)試,WinDbg就能在System Root文件夾中找到它們(除非轉(zhuǎn)儲(chǔ)文件創(chuàng)建后,二進(jìn)制文件因系統(tǒng)更新而更改)。此外,調(diào)試器應(yīng)該能夠通過SymServ來找到它們。如果配置得當(dāng),除了內(nèi)核轉(zhuǎn)儲(chǔ)外(下文有描述),Windows 7還會(huì)為每一次崩潰事件創(chuàng)建和保存微型轉(zhuǎn)儲(chǔ)。
2、內(nèi)核轉(zhuǎn)儲(chǔ)
內(nèi)核轉(zhuǎn)儲(chǔ)大小大致相當(dāng)于Windows 7的內(nèi)核占用的內(nèi)存。在我的筆記本電腦上,內(nèi)核轉(zhuǎn)儲(chǔ)約344MB大小,壓縮后只有100MB多點(diǎn)。內(nèi)核轉(zhuǎn)儲(chǔ)的一個(gè)優(yōu)點(diǎn)是,它含有二進(jìn)制文件。默認(rèn)情況下,我總是讓系統(tǒng)保存最近的內(nèi)核轉(zhuǎn)儲(chǔ)。請(qǐng)記住:系統(tǒng)在保存內(nèi)核轉(zhuǎn)儲(chǔ)時(shí),也會(huì)保存微型轉(zhuǎn)儲(chǔ)。
3、完整轉(zhuǎn)儲(chǔ)或完全轉(zhuǎn)儲(chǔ)
完全內(nèi)存轉(zhuǎn)儲(chǔ)大小相當(dāng)于已安裝內(nèi)存的數(shù)量。由于許多系統(tǒng)有數(shù)GB內(nèi)存,這方面的存儲(chǔ)很快會(huì)成為問題,如果你頻頻遇到崩潰,更是如此。我通常不建議保存完全內(nèi)存轉(zhuǎn)儲(chǔ),因?yàn)樗鼈冋加锰嗟目臻g,而且一般也不需要。不過微軟的Vachon倒建議:“如果你試圖調(diào)試一個(gè)很復(fù)雜的問題,比如設(shè)備中多個(gè)服務(wù)之間的遠(yuǎn)程過程調(diào)用(RPC)問題,又想看看這些服務(wù)在用戶模式下進(jìn)行什么操作,完全內(nèi)存轉(zhuǎn)儲(chǔ)就大有幫助。”因此,要堅(jiān)持保存內(nèi)核轉(zhuǎn)儲(chǔ),但要準(zhǔn)備偶爾創(chuàng)建完全轉(zhuǎn)儲(chǔ)。
如果沒有內(nèi)存轉(zhuǎn)儲(chǔ)可供使用,怎么辦?
如果你沒有內(nèi)存轉(zhuǎn)儲(chǔ)可以查看,也不用擔(dān)心,可以讓系統(tǒng)崩潰!最簡(jiǎn)單的方法(不必更改注冊(cè)表的設(shè)置)是,運(yùn)行一個(gè)名為NotMyFault的出色工具(這要感謝Mark Russinovich和SysInternals網(wǎng)站的團(tuán)隊(duì))。它提供了一系列選項(xiàng),可以加載行為異常的驅(qū)動(dòng)程序(這需要管理員權(quán)限)。
但記住:NotMyFault會(huì)制造系統(tǒng)崩潰!所以要讓你的系統(tǒng)準(zhǔn)備好,確信讓需要訪問該系統(tǒng)的任何人注銷退出幾分鐘。凡是含有可能會(huì)丟失的信息的文件都要保存,并關(guān)閉應(yīng)用程序。如果按上述方法配置了系統(tǒng),它應(yīng)該沒有問題。機(jī)器應(yīng)該會(huì)崩潰,重新啟動(dòng),這樣就有了內(nèi)核轉(zhuǎn)儲(chǔ)和微型轉(zhuǎn)儲(chǔ)可以查看。我用過好多次,毫無問題。#p#
下載NotMyFault,迫使系統(tǒng)崩潰
1、從下列微軟網(wǎng)址下載NotMyFault工具:http://download.sysinternals.com/Files/Notmyfault.zip,將文件提取到文件夾。
2、鼠標(biāo)右擊NotMyFault.exe,或者在命令提示符下,鍵入NotMyFault。如果看到“You don't have permission to open this file”(你沒有權(quán)限打開此文件)的信息,那么再試一次,但是鼠標(biāo)右擊時(shí),選擇“Run as Administrator”(以管理員身份運(yùn)行)。
3、從菜單中選擇High IRQL fault (kernelmode))和Do Bug按鈕。這將生成一個(gè)內(nèi)存轉(zhuǎn)儲(chǔ)文件和“Stop D
4、稍等一下...你的系統(tǒng)馬上會(huì)回來,會(huì)有微型轉(zhuǎn)儲(chǔ)和內(nèi)核轉(zhuǎn)儲(chǔ)可以查看了。
加載轉(zhuǎn)儲(chǔ)文件
如果你看到“你沒有權(quán)限打開此文件”的信息,通過鼠標(biāo)右擊WinDbg來進(jìn)行重新啟動(dòng),選擇“以管理員身份運(yùn)行”。
一旦調(diào)試器運(yùn)行,選擇菜單選項(xiàng)File | Open crash dump(文件|打開崩潰轉(zhuǎn)儲(chǔ)),指向它,打開你想要分析的內(nèi)存轉(zhuǎn)儲(chǔ)。如果你想讓它記住轉(zhuǎn)儲(chǔ)文件在哪里,那么看到Save information for workspace(為工作區(qū)保存信息)時(shí),選擇Yes(確定)。
WinDbg會(huì)尋找Windows的這個(gè)確切版本的Windows符號(hào)文件。它引用符號(hào)文件路徑,訪問microsoft.com,并顯示結(jié)果。
注意:如果調(diào)試器似乎很忙,那可能是第一次打開特定機(jī)器的轉(zhuǎn)儲(chǔ)文件,因而,WinDbg從SymServ下載符號(hào)。下次打開同一臺(tái)機(jī)器的轉(zhuǎn)儲(chǔ)時(shí),調(diào)試器似乎會(huì)快得多,因?yàn)榉?hào)文件已在本機(jī)上。
命令窗口會(huì)出現(xiàn),崩潰分析顯示在該窗口上。左下角將是KD>提示符。提示符右邊是一個(gè)單行窗口,你可以在這里輸入命令。
可能的錯(cuò)誤信息
如果你看到信息:
ERROR: Symbol file could not be found. Defaulted to export symbols for ntoskrnl.exe -
錯(cuò)誤:符號(hào)文件找不到。默認(rèn)情況下導(dǎo)出ntoskrnl.exe的符號(hào)-
通常是下列三種情況中有一種出錯(cuò)了:
路徑不正確;仔細(xì)檢查,確保之前輸入的符號(hào)文件路徑?jīng)]有拼寫錯(cuò)誤或其他錯(cuò)誤(如空白處)
連接失效,檢查互聯(lián)網(wǎng)連接,確保它在正常工作
防火墻禁止訪問符號(hào)文件,或者符號(hào)文件在檢索過程中已損壞
如果你的路徑和連接沒問題,那么問題可能出在防火墻上。如果防火墻一開始阻止WinDbg下載符號(hào)表,這會(huì)導(dǎo)致符號(hào)文件損壞。如果對(duì)防火墻解禁,再次試圖下載符號(hào)文件仍不行,那么表明符號(hào)文件已損壞。最快的解決辦法是關(guān)閉WinDbg,刪除symbols文件夾(最有可能設(shè)成c:\symbols),并且對(duì)防火墻解禁。現(xiàn)在,重新打開WinDbg和轉(zhuǎn)儲(chǔ)文件。調(diào)試器會(huì)重新創(chuàng)建文件夾,并重新下載符號(hào)。
如果你看到這個(gè)信息:
Kernel symbols are WRONG. Please fix symbols to do analysis.
內(nèi)核符號(hào)錯(cuò)誤。請(qǐng)改正符號(hào),進(jìn)行分析。
那么,WinDbg無法檢索正確的符號(hào),它會(huì)改而使用默認(rèn)的符號(hào)表。但是這個(gè)警告信息表明,它無法生成正確的結(jié)果。請(qǐng)記住:符號(hào)表是在程序編譯時(shí)生成的,所以每個(gè)Windows版本、補(bǔ)丁和熱修復(fù)程序等都有符號(hào)表文件。返回到前一個(gè)章節(jié),確保你設(shè)置的路徑正確、連接正常,而且沒有被阻止。
從頭到尾瀏覽WinDbg的輸出。你可能會(huì)看到類似以下的錯(cuò)誤信息,表明它可能找不到信息myfault.sys:
Unable to load image \??\C:\Windows\system32\drivers\myfault.sys, Win32 error 0n2
無法加載映像\??\C:\Windows\system32\drivers\myfault.sys, Win32 error 0n2
WARNING: Unable to verify timestamp for myfault.sys
警告:無法為myfault.sys驗(yàn)證時(shí)間戳
ERROR: Module load completed but symbols could not be loaded for myfault.sys
錯(cuò)誤:模塊加載已完成,但無法為myfault.sys加載符號(hào)
這意味著,調(diào)試器在尋找myfault.sys方面的信息。然而,由于它像第三方驅(qū)動(dòng)程序(是的,它是由微軟開發(fā),但肯定不是平常的微軟產(chǎn)品),它沒有符號(hào)(微軟并不存儲(chǔ)所有第三方驅(qū)動(dòng)程序)。可以忽視 該錯(cuò)誤信息。供應(yīng)商通常在交付驅(qū)動(dòng)程序時(shí)不附帶符號(hào)文件,符號(hào)文件并不是你所必要的;沒有符號(hào)文件,你也能找到有問題的驅(qū)動(dòng)程序。
當(dāng)你讓W(xué)inDbg打開轉(zhuǎn)儲(chǔ)文件后,它會(huì)自動(dòng)進(jìn)行基本的分析。甚至不用給調(diào)試器下達(dá)任何直接命令,它已報(bào)出了可疑對(duì)象,如下面屏幕所示。
命令
有數(shù)百個(gè)命令可以控制WinDbg;WinDbg是個(gè)功能很強(qiáng)大的工具。幸運(yùn)的是,我們只需要一個(gè)命令。為了讓探討更深入一點(diǎn),我們將多用兩個(gè)命令,總共有三個(gè)命令。它們是!analyze –v、lmv和lmvm。
!analyze –v |
以詳細(xì)模式分析 |
!analyze –v顯示了系統(tǒng)崩潰時(shí),描述系統(tǒng)狀態(tài)的信息,遇到的故障,以及誰是主要的可疑對(duì)象。 |
lmv |
顯示加載模塊的 詳細(xì)信息 |
lmv顯示了一系列驅(qū)動(dòng)程序及路徑、版本和供應(yīng)商信息。它常包含產(chǎn)品描述。lmv輸出結(jié)果可能要很長(zhǎng)的時(shí)間。留意WinDbg界面的左下角,你通常會(huì)看到kd>提示符。獲取信息時(shí),它會(huì)顯示*BUSY*。只有kd>提示符返回后,你才能使用另外的命令。 |
lmvm [模塊名稱] |
顯示某加載模塊 (模塊名稱)的 詳細(xì)信息 |
lmvm[模塊名稱]讓你能夠告訴調(diào)試器只獲取那個(gè)特定模塊的信息。比如說:lmvm myfault.sys。 |
!analyze -v
在命令窗口底部的命令行上輸入!analyze -v(注意yynw命令與“-v”之間的空間)。V(詳細(xì))這個(gè)參數(shù)選項(xiàng)符告訴WinDbg,你想要所有的詳細(xì)信息。它給出的解釋結(jié)合了英語和編程術(shù)語,不過這是個(gè)良好的開頭。實(shí)際上,在許多情況下,你可能不需要任何下一步操作。如果你明白了崩潰的原因,可能就搞定了。
下面這個(gè)例子是使用NotmyFault驅(qū)動(dòng)程序來分析我們的崩潰。
如果使用!analyze –v,調(diào)試器輸出結(jié)果的一個(gè)重要部分是堆棧文本。每次查看轉(zhuǎn)儲(chǔ)文件,總要關(guān)注堆棧最右邊,留意任何第三方驅(qū)動(dòng)程序。在本例中,我們看到了myfault。請(qǐng)注意:事件由下往上按年月順序排列;系統(tǒng)執(zhí)行每個(gè)新任務(wù)時(shí),新任務(wù)會(huì)顯示在最上面,把以前的操作往下移。在這個(gè)很短的堆棧中,你會(huì)看到myfault處于活躍狀態(tài),然后出現(xiàn)頁面錯(cuò)誤,系統(tǒng)聲明進(jìn)行錯(cuò)誤檢查,這正是系統(tǒng)停止(藍(lán)屏)的時(shí)候。請(qǐng)注意:部分?jǐn)?shù)據(jù)已被清除,以便該內(nèi)容能在一個(gè)頁面上顯示,“truncated”注釋表明了這點(diǎn)。
用lmv來分析
下一步是確認(rèn)可疑對(duì)象的存在,并找到有關(guān)它的任何詳細(xì)信息。往命令行中輸入lvm,可顯示已加載的模塊;v指調(diào)試器以詳細(xì)模式輸出,顯示模塊的所有已知詳細(xì)信息。
如果運(yùn)行命令lmv后,你看到WinDbg的界面左下角出現(xiàn)*BUSY*(*忙碌*)信息,也不用擔(dān)心。這是由于它在收集系統(tǒng)發(fā)生故障時(shí),加載模塊的詳細(xì)信息;收集過程可能需要幾分鐘。收集完畢后,你會(huì)在原來顯示BUSY的地方看到kd>。
這里有大量信息。找到所要關(guān)注的驅(qū)動(dòng)程序得花點(diǎn)時(shí)間,所以可通過選擇Edit | Find(編輯|查找)來簡(jiǎn)化這個(gè)過程,然后輸入可疑的驅(qū)動(dòng)程序,這里是myfault。你看到的信息多少取決于驅(qū)動(dòng)程序供應(yīng)商。一些供應(yīng)商把很少的信息放在文件中,而微軟等另一些供應(yīng)商往往把全面的信息放在文件中。
用lmvm來分析
想直接找到某個(gè)特定模塊,一個(gè)好方法就是使用lmvm命令。在這種情況下,輸入lmvm myfault,調(diào)試器將只返回針對(duì)該模塊的數(shù)據(jù)。
你找到供應(yīng)商的名稱后,進(jìn)入其網(wǎng)站,檢查更新、知識(shí)庫文章及其他支持信息。要是沒有這些內(nèi)容,或未能解決問題,請(qǐng)聯(lián)系供應(yīng)商。對(duì)方可能會(huì)要你把調(diào)試信息發(fā)過去(很容易把調(diào)試器的輸出結(jié)果拷貝到電子郵件或Word文檔里面),或者可能會(huì)要你把內(nèi)存轉(zhuǎn)儲(chǔ)發(fā)過去(先進(jìn)行打包,既為了壓縮內(nèi)存轉(zhuǎn)儲(chǔ),又為了保護(hù)數(shù)據(jù)完整性)。
另外的三分之一
幸運(yùn)的是,你一打開轉(zhuǎn)儲(chǔ)文件就知道原因的機(jī)率大概有三分之二。但有時(shí)轉(zhuǎn)儲(chǔ)文件提供的信息具有誤導(dǎo)性,或者不夠全面。這時(shí)候,又該怎么辦呢?
有時(shí)原因出在硬件上
如果你老是遇到崩潰,又沒有明確或一致的原因,可能出在內(nèi)存問題上。下載免費(fèi)測(cè)試工具M(jìn)emtest86。這個(gè)簡(jiǎn)單的診斷工具運(yùn)行速度快、效果好。許多人輕視內(nèi)存問題的可能性,因?yàn)閮?nèi)存問題僅占系統(tǒng)崩潰的一小部分。然而,內(nèi)存問題常常是害得你一直猜測(cè)的原因。
Windows是罪魁禍?zhǔn)讍幔?/strong>
很抱歉,這不可能!雖然可能有人會(huì)覺得很意外,但事實(shí)上,操作系統(tǒng)很少出錯(cuò)。如果ntoskrnl.exe(Windows核心)或win32.sys(主要負(fù)責(zé)Windows上GUI層的驅(qū)動(dòng)程序)被列為是罪魁禍?zhǔn)?mdash;—它們常常被這樣列為,也不要過于草率地下定論。下面這種可能性大得多:某個(gè)異常的第三方設(shè)備驅(qū)動(dòng)程序調(diào)用了Windows組件,以執(zhí)行一項(xiàng)操作,然后傳送了壞的指令,比如告訴它寫入到根本不存在的內(nèi)存。所以,盡管操作系統(tǒng)肯定會(huì)犯錯(cuò),但你在怪罪微軟之前先排除掉其他的所有可能性。
冤枉驅(qū)動(dòng)程序
你經(jīng)常會(huì)看到反病毒驅(qū)動(dòng)程序被列為是崩潰的原因。比如說,使用!analyze -v后,調(diào)試器在“IMAGE_NAME”(映像名稱)這一行報(bào)告反病毒軟件的驅(qū)動(dòng)程序。原因可能確實(shí)出在反病毒驅(qū)動(dòng)程序上,不過要牢記:這類驅(qū)動(dòng)程序被冤枉的可能性更大。原因如下:反病毒代碼要工作,它必須監(jiān)視所有的文件打開和關(guān)閉。為了做到這一點(diǎn),代碼處在操作系統(tǒng)的低層,而且在不斷工作。實(shí)際上,該代碼太忙碌了;崩潰發(fā)生時(shí),它常常出現(xiàn)在活躍的函數(shù)調(diào)用堆棧上,哪怕明明不是它導(dǎo)致崩潰,也這樣。因?yàn)樵摱褩I系娜魏蔚谌津?qū)動(dòng)程序立即成為可疑對(duì)象,所以反病毒驅(qū)動(dòng)程序常常被列為崩潰的原因。不管是不是真的導(dǎo)致了問題,反病毒代碼都經(jīng)常出現(xiàn)在堆棧上。
缺少供應(yīng)商信息?
一些驅(qū)動(dòng)程序供應(yīng)商并沒有花時(shí)間把足夠的信息附在模塊后面。所以,如果lmv起不到幫助,試著查看映像路徑上的子目錄(如果有映像路徑的話)。常常其中一個(gè)子目錄就是供應(yīng)商名稱或者名稱縮寫。另一個(gè)辦法就是用谷歌搜索引擎搜一下。輸入驅(qū)動(dòng)程序名稱及/或文件夾名稱。除了別人發(fā)布的關(guān)于該驅(qū)動(dòng)程序的信息外,你可能還會(huì)找到相應(yīng)的這家供應(yīng)商。
總結(jié)
你已經(jīng)花了時(shí)間來準(zhǔn)備對(duì)付下一次藍(lán)屏死機(jī),記住:在大多數(shù)情況下,你打開轉(zhuǎn)儲(chǔ)文件后,立馬就能知道原因,整個(gè)過程用不了一分鐘。如此輕而易舉地查明三分之二的嚴(yán)重故障的原因,真是讓人滿意——對(duì)你的用戶們來說更是如此。
原文:How to Solve Windows 7 Crashes in Minutes
【51CTO精選譯文 轉(zhuǎn)載請(qǐng)標(biāo)明出處與作者】
【編輯推薦】