如何取樣 memory dump (2)

August 31st, 2009

Windows 提供了按 Ctrl-Scrlk 來產生 memory dump 的方法,第一步是設定系統在 crash 時會產生 memory dump (請見 Enabling a Kernel-Mode Dump File 一文,這篇文章有中文版的畫面設定),然後是設定系統在收到 Ctrl Scrlk 時發生藍屏 (見 Forcing a System Crash from the Keyboard 一文,中文版的內容和英文版的不盡相同)。使用這個方法產生 memory dump 有幾個陷阱必須注意。

首先,分頁檔的大小必須要足夠。微軟知識庫 KB 307973中有詳細的說明,節譯其中一部份如下:

RAM size 分頁檔最小的 size
256 MB–1,373 MB RAM size 的 1.5 倍
1,374 MB 以上 32 位元系統: 2 GB 加 16 MB
64 位元系統: RAM 的大小再加上 128 MB

一定要去檢查分頁檔的大小,因為某些系統優化軟體會在 user 不知情的情況之下去調整分頁檔的大小。

此外,從 kernel dump 去找 user-mode 程式的 crash 是很嚕囌的事情,如果 user 用的是 32 位元的系統,又有 2GB 以上的 RAM,那基本上用 kernel dump 是沒有什麼希望去找出 user-mode 程式的問題。更有甚者,要從 64 位元的 kernel dump 去找 32 位元 user-mode 程式的問題的話,這種折磨人的事還是能不做就不做吧。

Forcing a System Crash from the Keyboard 一文中提到,Ctrl-Scrlk 法在某些狀況下無效,特別是 kernel 正在處理 high IRQL request 時。也就是說,若是某個要到 high IRQL 的 driver 造成了系統沒有回應的話,這個方法並無法為我們取得所需要的 kernel dump。事實上這種情形應該不會發生,因為 high IRQL 的 driver 不可以造成系統沒有回應,不然這個 driver 可以直接視為品質不過關的山寨版試驗品。

一般 driver 若造成藍屏的話,我們可直接取得 memory.dmp 來除錯,也因此使用 Ctrl-Scrlk 的機會並不大。所以呢,通常我們不應該建議 user 來做這件事情,它除了浪費 user 和您自己的時間外,用處並不大。

Debugging, Windows, 技術文章 | Comments Jump to the top of this page

Comments are closed.

隨便寫寫大家隨便看看的不出名小格子

舊文索引

站內管理