咱們在 內核轉儲,開抓啦! 這篇文章裏介紹了一個關鍵的系統設置。設置好後可讓系統在藍屏(Blue Screen of Death,簡稱 BSOD
)的時候自動保存轉儲文件。那篇文章只是簡單的介紹了設置步驟,本文力求詳細的介紹相關內容。git
咱們先根據下面的動圖回顧一下設置步驟:windows
不知道你們有沒有想過這些設置保存在哪裏了呢?我猜保存在註冊表裏。咱們一塊兒來看看吧。緩存
爲了找到這些設置保存的位置,我特地用 process monitor
捕獲了整個設置過程,並錄製了一段視頻。bash
根據調查結果可知,轉儲類型
保存在註冊表中以下位置: HKLM\System\CurrentControlSet\Control\CrashControl\CrashDumpEnabled
。每一項對應的值以下表:spa
中文名 | 英文名 | 值 |
---|---|---|
(無) | (None) | 0 |
小內存轉儲(256KB) | Small memory dump | 3 |
核心內存轉儲 | Kernel memory dump | 2 |
徹底內存轉儲 | Complete memory dump | 1 |
自動內存轉儲 | Automatic memory dump | 7 |
活動內存轉儲 | Active memory dump | 1 |
咱們能夠發現, 徹底內存轉儲
和 活動內存轉儲
設置的 CrashDumpEnabled
的值竟然同樣,都是 1。確定有其它地方不同。把過濾條件改成 Path
begins with
HKLM\System\CurrentControlSet\Control\CrashControl
,操作系統
繼續觀察,獲得的對比結果以下。線程
通過對比咱們發現,當設置爲 活動內存轉儲
時,會設置註冊表項HKLM\System\CurrentControlSet\Control\CrashControl\FilterPages
的值爲 1
,當設置爲 徹底內存轉儲
時,會刪除 FilterPages
子項。翻譯
除了指定 轉儲類型
,咱們還能夠進行其它設置。調試
轉儲文件:
指定轉儲文件保存的位置。
對於小內存轉儲
,指定的是轉儲文件保存的目錄,默認是 %SystemRoot%\Minidump\
。對於其它幾種轉儲類型,指定的是轉儲文件的保存路徑,默認是 %SystemRoot%\MEMORY.DMP
。
自動從新啓動(R)
選項:若是勾選,可讓系統在藍屏後自動重啓。
將事件寫入系統日誌(W)
選項:若是勾選,能夠把藍屏事件記錄到系統日誌裏。
覆蓋任何現有文件(O)
選項:若是勾選,覆蓋已存在的同名文件,不然不覆蓋(若是已經有同名文件,本次藍屏的轉儲文件不會生成)。此選項對小內存轉儲
不生效。
禁止在磁盤空間不足時自動刪除內存轉儲(A)
選項:若是勾選,即便在磁盤空間不足時也不刪除以前保存的轉儲文件。此選項在 win7
中不存在,是在更高版本的操做系統中引入的。
每一項在註冊表中的對應位置,請參考以下代碼。保存爲 .reg
文件,雙擊便可導入。
Windows Registry Editor Version 5.00
; 將事件寫入系統日誌。 1 表示寫入,0 表示不寫入
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
"LogEvent" = dword:00000000
; 是否自動重啓。1 表示自動重啓,0 表示不自動重啓
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
"AutoReboot" = dword:00000000
; 轉儲類型。每一個值的意義參考上表
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
"CrashDumpEnabled" = dword:00000001
; 轉儲文件的保存路徑。以二進制形式表示的 UNICODE 路徑。默認值是 %SystemRoot%\MEMORY.DMP
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
"DumpFile" = hex(2) :25, 00, 53, 00, 79, 00, 73, 00, 74, 00, 65, 00, 6d, 00, 52, 00, 6f, 00, 6f, 00, \
74, 00, 25, 00, 5c, 00, 4d, 00, 45, 00, 4d, 00, 4f, 00, 52, 00, 59, 00, 2e, 00, 44, 00, 4d, 00, 50, \
00, 00, 00
; 小內存轉儲文件保存路徑。以二進制形式表示的 UNICODE 路徑。默認值是 %SystemRoot%\MEMORY.DMP
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
"MinidumpDir" = hex(2) :25, 00, 53, 00, 79, 00, 73, 00, 74, 00, 65, 00, 6d, 00, 52, 00, 6f, 00, 6f, \
00, 74, 00, 25, 00, 5c, 00, 4d, 00, 69, 00, 6e, 00, 69, 00, 64, 00, 75, 00, 6d, 00, 70, 00, 00, 00
; 小內存轉儲文件保存的最大個數。若是轉儲文件數量超過此值,則刪除最舊的那個。
; 界面上沒有對應的設置,只能經過註冊表修改。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
"MinidumpsCount" = dword:00000005
; 覆蓋任何現有文件。1 表示覆蓋,0 表示不覆蓋。對小內存轉儲不生效。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
"Overwrite" = dword:00000001
; 禁止在磁盤空間不足時自動刪除內存轉儲。 1 表示不刪除,0 表示刪除
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
"AlwaysKeepMemoryDump" = dword:00000000複製代碼 |
關於這幾種轉儲類型的介紹,主要翻譯自微軟官方文檔,但不徹底是。英語好的小夥伴兒請參考微軟官方文檔。
徹底內存轉儲
包含操做系統使用的全部物理內存。默認不包含平臺固件佔用的物理內存。爲了確保轉儲文件能夠順利生成,請確保引導盤上的頁面文件大小至少是物理內存大小 + 1 MB(寫轉儲文件時須要一些頭信息)。假設,物理內存是 4GB
,咱們須要保證初始大小至少是 4097MB
。固然設置成更大的值也不要緊。咱們能夠按下圖進行設置:
活動內存轉儲
活動內存轉儲
相似於 完整內存轉儲
,可是會過濾掉不太可能與排除故障相關的頁面。因爲這種過濾,產生的轉儲文件一般比 完整內存轉儲
小得多。
這種類型的轉儲文件包含分配給用戶模式應用程序的任何內存。它還包括分配給 Windows
內核和硬件抽象層(HAL
)的內存,以及分配給內核模式驅動程序和其餘內核模式程序的內存。轉儲文件包括映射到內核或用戶空間的對調試有用的活動頁面,還包括選擇的以分頁文件爲後備的轉換、備用和修改頁面,好比使用 VirtualAlloc
或以分頁文件爲後備的內存區域。活動內存轉儲
不包括空閒列表、零列表、文件緩存、客戶虛擬機頁面和其餘各類類型的不太可能對調試有用的內存。
當目標系統中託管了虛擬機的時候,活動內存轉儲
特別有用。徹底內存轉儲
會包含全部虛擬機佔用的內存,而活動內存轉儲
不會。
活動內存轉儲 在 Windows 10 或更高版本的系統中可用。
核心內存轉儲
包含了系統崩潰時內核所使用的物理內存。
這種轉儲文件比完整內存轉儲小得多。
核心內存轉儲
不包括未分配的內存,或分配給用戶態應用程序的任何內存。它只包括分配給 Windows
內核和硬件抽象層(HAL
)的內存,以及分配給內核模式驅動程序和其餘內核模式程序的內存。
大多數狀況下,這種類型的崩潰轉儲是最有用的。它比徹底內存轉儲小得多,可是它只忽略了那些不太可能涉及崩潰的內存部分。
因爲這種轉儲文件不包含崩潰時駐留在內存中的任何用戶模式可執行文件的映像,因此若是這些可執行文件很是重要,您可能還須要設置可執行映像路徑。
自動內存轉儲自動內存轉儲
與 內核內存轉儲
包含相同的信息。二者的區別不在於轉儲文件自己,而在於 Windows
設置系統分頁文件大小的方式。
若是系統分頁文件大小設置爲 系統管理的大小(Y)
,轉儲類型設置爲 自動內存轉儲
,那麼 Windows
能夠將分頁文件大小設置的比物理內存還要小。在這種狀況下,Windows
將分頁文件的大小設置得足夠大,以確保在大多數狀況下能夠捕獲內核內存轉儲。
若是系統崩潰,而分頁文件的大小不足以保存內核內存轉儲,則 Windows
會將分頁文件的尺寸增長到至少物理內存的大小。此事件(增大分頁文件尺寸的事件)發生的時間會被記錄在註冊表項
HKLM\SYSTEM\CurrentControlSet\Control\CrashControl\LastCrashTime
中。
增長後的分頁文件大小將保持 4
周,而後恢復到以前較小的值。若是但願在 4
周以前就恢復到以前較小的值,能夠刪除此註冊表項。
自動內存轉儲在 Windows 8 或更高版本的系統中可用。
小內存轉儲(256KB)
小內存轉儲包含以下內容:
錯誤檢查信息和參數,以及其它藍屏數據。
崩潰的處理器上下文(PRCB
)。
崩潰進程的進程信息和內核上下文(EPROCESS
)。
崩潰線程的線程信息和內核上下文(ETHREAD
)。
崩潰線程的內核模式調用堆棧。若是它大於 16 KB
,則只包含最前面的 16 KB
。
加載的驅動程序列表。
在 Windows XP
和 Windows
的後續版本中,還包括如下內容:
已加載模塊和已卸載模塊的列表。
調試器數據塊。它包含關於系統的基本調試信息。
Windows
標識爲對調試失敗有用的任何附加內存頁。這包括髮生崩潰時寄存器所指向的內存頁,以及故障組件特別請求的其餘內存頁。
(Windows Server 2003
及更高版本)The Windows SKU
—— 好比,」Professional」 或者 「Server」。
關於 Windows SKU
能夠參考連接 www.thewindowsclub.com/windows-7-v…
小內存轉儲(256KB)
默認會保存到 %SystemRoot%\Minidump
文件夾下,其它幾種類型的轉儲文件默認保存到 %SystemRoot%\Memory.dmp
。徹底內存轉儲
> 活動內存轉儲
> 核心內存轉儲
= 自動內存轉儲
> 小內存轉儲
。HKLM\System\CurrentControlSet\Control\CrashControl\
下,能夠根據須要修改本文中的代碼,並另存爲 .reg
文件,雙擊導入系統便可。注意須要重啓生效。missing page
錯誤,可使用 .ignore_missing_pages
命令。process monitor
的幫助下,沒查看任何幫助文檔就把各個類型的轉儲文件對應的值及保存位置調查清楚了!process monitor
真是調查此類問題的神兵利器!你值得擁有!