藍屏(BSOD)轉儲設置,看本文就夠了!

前言

咱們在 內核轉儲,開抓啦! 這篇文章裏介紹了一個關鍵的系統設置。設置好後可讓系統在藍屏(Blue Screen of Death,簡稱 BSOD)的時候自動保存轉儲文件。那篇文章只是簡單的介紹了設置步驟,本文力求詳細的介紹相關內容。git

咱們先根據下面的動圖回顧一下設置步驟:windows

系統轉儲設置

不知道你們有沒有想過這些設置保存在哪裏了呢?我猜保存在註冊表裏。咱們一塊兒來看看吧。緩存

保存位置

爲了找到這些設置保存的位置,我特地用 process monitor 捕獲了整個設置過程,並錄製了一段視頻。bash

system-crash-dump-setting-investigate

根據調查結果可知,轉儲類型 保存在註冊表中以下位置: 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 子項。翻譯

說明:win7 及更早的系統中沒有 自動內存轉儲活動內存轉儲 選項。 自動內存轉儲 是從 win8 開始引入的。活動內存轉儲 是從 win10 開始引入的。debug

win7 系統轉儲設置

其它相關設置

除了指定 轉儲類型,咱們還能夠進行其它設置。調試

  • 轉儲文件: 指定轉儲文件保存的位置。

    對於小內存轉儲,指定的是轉儲文件保存的目錄,默認是 %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。固然設置成更大的值也不要緊。咱們能夠按下圖進行設置:

    manually-set-page-file-size

  • 活動內存轉儲

    活動內存轉儲 相似於 完整內存轉儲,可是會過濾掉不太可能與排除故障相關的頁面。因爲這種過濾,產生的轉儲文件一般比 完整內存轉儲 小得多。

    這種類型的轉儲文件包含分配給用戶模式應用程序的任何內存。它還包括分配給 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 XPWindows 的後續版本中,還包括如下內容:

    • 已加載模塊和已卸載模塊的列表。

    • 調試器數據塊。它包含關於系統的基本調試信息。

    • 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 真是調查此類問題的神兵利器!你值得擁有!

參考資料

相關文章
相關標籤/搜索