使用者模式傾印檔案
在本文中,取得使用者模式傾印檔案的概觀,以及如何使用這些檔案來協助解決 Bug 和當機。
如需分析傾印檔案的相關信息,請參閱 分析使用者模式傾印檔案。
使用者模式傾印檔案的類型
有數種類型的使用者模式損毀傾印檔案可供使用。 不同類型的傾印檔案分為兩個類別:
您可以藉由分析傾印檔案來取得大量的資訊。 不過,任何傾印檔案都無法提供您使用調試程式偵錯損毀時取得的資訊量。
完整使用者模式傾印
完整使用者模式傾印是基本的使用者模式傾印檔案。 完整的使用者模式傾印檔案包括:
- 進程的整個記憶體空間。
- 程式的可執行映像。
- 句柄數據表。
- 其他資訊,可協助調試程式重建傾印發生時所使用的記憶體。
您可以將 完整的使用者模式傾印檔案壓縮 成小型傾印。 若要壓縮完整的使用者模式傾印檔案,請先在調試程式中載入傾印檔案。 然後,使用 .dump (建立傾印檔案) 命令,以迷你傾印格式儲存新的傾印檔案。
儘管名稱相同,但最大的小型傾印檔案包含比完整使用者模式傾印檔案更多的資訊。 例如, .dump /mf
和 .dump /ma
命令會建立比 命令更大且更完整的檔案 .dump /f
。
在使用者模式中, .dump /m
[MiniOptions] 通常是最佳選擇。 您使用此參數建立的傾印檔案大小可能會從非常小到非常大。 藉由指定正確的 MiniOptions 參數,您可以完全控制包含哪些資訊。
Minidumps
小型傾印檔案的大小和內容會根據所傾印的程式和執行傾印的應用程式和選取的選項而有所不同。 有時候,小型傾印檔案的大小相當大,且包含完整記憶體和句柄數據表。 其他時候,小型傾印檔案要小得多。 例如,小型傾印檔案可能只包含單一線程的相關信息,或可能只包含堆疊中參考之模組的相關信息。
小型傾印一詞會造成誤導,因為最大的小型傾印檔案包含比完整使用者模式傾印檔案更多的資訊。 例如, .dump /mf
或 .dump /ma
建立大於 且更完整的檔案 .dump /f
。 基於這個理由,我們建議您使用 .dump /m
[MiniOptions] 而不是 .dump /f
建立所有使用者模式傾印檔案。
如果您使用調試程式建立小型傾印檔案,您可以選擇要包含的資訊。 .dump /m
此命令包含組成目標進程、線程資訊和堆疊資訊之已載入模組的基本資訊。 您可以使用下表所述的任何參數選項來修改基本命令:
.dump 選擇 |
傾印檔案的效果 |
---|---|
/ma |
建立具有所有選擇性新增功能的小型傾印。 選項 /ma 相當於 /mfFhut 。 它會將完整記憶體數據、處理數據、卸除的模組資訊、基本記憶體資訊和線程時間資訊新增至小型傾印。 |
/mf |
將完整記憶體數據新增至迷你傾印。 包含目標應用程式所擁有的所有可存取認可頁面。 |
/mF |
將所有基本記憶體資訊新增至迷你傾印。 此參數會將數據流新增至包含所有基本記憶體資訊的小型傾印,而不只是有效記憶體的相關信息。 調試程式會使用資訊,在偵錯小型傾印時重新建構進程的完整虛擬記憶體配置。 |
/mh |
將與目標應用程式相關聯的句柄相關數據新增至小型傾印。 |
/mu |
將卸除的模組資訊新增至小型傾印。 此選項僅適用於 Windows Server 2003 和更新版本的 Windows。 |
/mt |
將更多線程資訊新增至迷你傾印。 線程資訊包含線程時間,您可以在偵錯迷你傾印時使用 .ttime (顯示線程時間) 來顯示。 |
/mi |
將次要記憶體新增至迷你傾印。 次要記憶體 是堆疊或備份存放區指標所參考的任何記憶體,加上此位址周圍的小型區域。 |
/mp |
將進程環境區塊和線程環境區塊數據新增至小型傾印。 如果您需要存取有關應用程式進程和線程的 Windows 系統資訊,這項資訊可能會很有用。 |
/mw |
將所有認可的讀寫私人頁面新增至小型傾印。 |
/md |
將可執行檔映像內的所有讀寫數據區段新增至小型傾印。 |
/mc |
在影像中新增程式代碼區段。 |
/mr |
從堆疊的小型傾印部分刪除,並儲存未用來重新建立堆棧追蹤的記憶體。 也會刪除局部變數和其他數據類型值。 這個選項不會讓小型傾印更小(未使用的記憶體區段會歸零),但如果您想要保護其他應用程式的隱私權,會很有用。 |
/mR |
從迷你傾印中刪除完整的模組路徑。 只包含模組 名稱 。 如果您想要保護使用者目錄結構的隱私權,這個選項很有用。 |
您可以結合這些切換選項。 例如,使用 命令 .dump /mfiu
來建立中小型傾印,其中包含卸除和次要記憶體。 使用 命令 .dump /mrR
來建立小型傾印,以移除部分用戶的資訊。 如需完整的語法詳細數據,請參閱 .dump (建立傾印檔案)。
用來建立傾印檔案的工具
您可以使用數種不同的工具來建立使用者模式傾印檔案:
ProcDump
ProcDump 是命令行公用程式,可用來監視應用程式是否有 CPU 尖峰,以及在尖峰期間產生損毀傾印。 系統管理員或開發人員可以使用損毀傾印檔案來判斷尖峰的原因。 ProcDump 也包含監視已停止響應的視窗(使用 Windows 和任務管理器所使用的視窗停止回應相同定義),以及未處理的例外狀況。 您可以使用 ProcDump,根據系統性能計數器的值來產生傾印。 ProcDump 也可以做為一般進程傾印公用程式,您可以在其他腳本中內嵌。
如需使用 Sysinternals ProcDump 公用程式建立使用者模式傾印檔案的相關信息,請參閱 ProcDump。
WinDbg 和CDB
主控台調試程式 (CDB) 和 Windows 調試程式 (WinDbg) 是 Windows 軟體開發工具套件和 Windows 驅動程式套件中包含的偵錯工具。 請參閱下載並安裝 WinDbg Windows 調試程式中的安裝選項。
您可以使用 CDB 或 WinDbg,以多種方式建立使用者模式傾印檔案:
- 自動建立傾印檔案。
- 偵錯時建立傾印檔案。
- 壓縮現有的傾印檔案。
如需工具的詳細資訊,請參閱使用CDB開始使用Windows偵錯和偵錯。
自動建立傾印檔案
發生應用程式錯誤時,Windows 可能會以數種方式之一回應,視事後偵錯設定而定。 如果這些設定指示偵錯工具建立傾印檔案,則會建立使用者模式記憶體轉儲檔案。 如需詳細資訊,請參閱 啟用驗屍偵錯。
偵錯時建立傾印檔案
當 CDB 或 WinDbg 偵錯使用者模式應用程式時,您也可以使用 .dump (建立傾印檔案) 命令來建立傾印檔案。
此命令不會造成目標應用程式終止。 藉由選取特定的命令選項,您可以建立小型傾印檔案,其中包含您想要的資訊量。
壓縮現有的傾印檔案
您可以使用 CDB 或 WinDbg 來壓縮傾印檔案。 若要壓縮傾印檔案,請開始偵錯現有的傾印檔案。 然後,使用 .dump
命令來建立大小較小的傾印檔案。
時間移動偵錯
偵錯使用者模式應用程式的另一個選項是時間移動偵錯 (TTD)。 TTD 是一種工具,可用來在程式執行時記錄進程。 您可以重新執行調試程式會話的錄製,以尋找 Bug。 您可以輕鬆地移至錄製的不同部分,以了解導致 Bug 的條件,以及如何修正問題。
TTD 比損毀傾印檔案有顯著優勢,這通常遺漏導致失敗的程式代碼執行。 在程式代碼執行中往回移動的能力,對於判斷根本原因很有用。
如需詳細資訊,請參閱 時間移動偵錯概觀。
另請參閱
- 瞭解如何 分析使用者模式傾印檔案。
- 取得從傾印檔案擷取資訊的秘訣。