總結Dump抓取和分析方法(一)
1.系統生成Dump設置
- 打開藍屏Dump收集設置,可以設多種dump類型。在系統》系統信息》高級系統設置》告警》啟動和故障恢復》設置。可以配置崩潰時生成的dump類型。
有小內存轉儲 ,核心內存轉儲、完全內存轉儲、自動內存轉儲、活動內存轉儲。
小內存轉儲(256KB)保存最小關鍵信息(如錯誤代碼、故障線程等),文件小(約2-50MB),適合快速定位常見崩潰原因。C:\Windows\Minidump\
核心內存轉儲:記錄內核模式內存(系統核心、驅動等),排除用戶程序數據。文件大小約GB級,平衡了實用性與空間占用。
完全內存轉儲:保存物理內存全部內容(包括用戶程序數據)。文件極大(等于物理內存大小),僅用于極端疑難問題。
自動內存轉儲: 動態調整轉儲文件大小(基于系統運行時內存占用),優先保留最新故障數據,節省磁盤空間。
活動內存轉儲:專為服務器設計,可捕獲故障時關鍵進程內存(無需停機),文件較小,減少服務中斷影響。
一般推薦核心內存轉儲內容比較詳細,若是有時候崩潰無dump,那可以設置小內存轉儲。
2.應用生成Dump設置
方法 1:通過注冊表(WER LocalDumps,精準控制單個應用)
- 定位路徑:
- 全局生效(所有應用):HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
僅針對特定應用(如MyApp.exe):在LocalDumps下新建子鍵,命名為應用的進程名(如MyApp.exe)。
- 添加配置項(在目標鍵下右鍵→新建字符串 / DWORD 值):
- DumpFolder(REG_EXPAND_SZ):指定 dump 保存路徑(如C:\MyAppCrashDumps,需確保目錄存在)。
- DumpCount(REG_DWORD):最多保存的 dump 文件數。
- DumpType(REG_DWORD):1:小內存轉儲;2:完全內存轉儲。
執行dump.bat對所有應用崩潰生成dump。執行MyAppDump.bat對指定應用崩潰生成dump
dump.bat
MyAppDump.bat
方法 2:使用微軟工具 Procdump(靈活監控,支持運行中進程)
- 下載 Procdump:從微軟官網(ProcDump - Sysinternals)下載,解壓到任意目錄。
- 命令行監控:
- 針對已運行的進程(如MyApp.exe的進程 ID 為1234):
- cmd
procdump -e -ma -o C:\MyAppCrashDumps\ 1234- -e:進程崩潰時捕獲 dump;
- -ma:生成完全內存轉儲;
- -o:覆蓋已有文件;
- 最后跟進程 ID或進程名(如MyApp.exe)。
- 針對未啟動的進程(啟動時自動監控):
- cmd
procdump -e -ma -o C:\MyAppCrashDumps\ -w MyApp.exe- -w:等待MyApp.exe啟動后開始監控。
procdump官方解釋很多用法:ProcDump - Sysinternals
方法3:通過環境變量配置(運行時自動生成)適用.Net應用
- 設置環境變量(啟動應用前配置):
- 臨時生效(命令行啟動時):
set DOTNET_DbgEnableMiniDump=1 // 啟用崩潰時生成dump
set DOTNET_DbgMiniDumpName=C:\DotNetDumps\app.dmp // dump保存路徑
set DOTNET_DbgMiniDumpType=2 // 2=全內存轉儲(Heap),1=小轉儲(Mini)
(.NET Framework 用 COMPlus_ 前綴,如 COMPlus_DbgEnableMiniDump=1,效果相同。)
- 永久生效:在系統環境變量中添加上述鍵值對(電腦→屬性→高級→環境變量)。
- 啟動應用:通過命令行或 IDE 運行,應用崩潰時自動生成 dump 到指定路徑。
方法4:任務管理器手動創建
通過任務管理器,右鍵應用進程,創建存儲文件。可以在應用卡住的時候進創建。
3.分析Dump
- 安裝 Windbg:通過微軟商店搜索 “WinDbg Preview” 安裝最新版本,或從Debugging Tools for Windows下載。
- 微軟介紹如何使用Windbg分析Dump:使用 WinDbg 分析故障轉儲文件 - Windows drivers
- WinDbg上有內置幫助系統在WinDbg中輸入
.hh或!analyze -?查看命令詳細說明 - 常用的dump分析的命令
!analyze -v 自動診斷崩潰原因(必執行) 輸出異常代碼、責任模塊、線程上下文
lm 列出已加載模塊 檢查驅動版本是否匹配
!process 0 0 顯示所有進程信息(PID、PEB地址) 定位觸發崩潰的進程(如Image: PinyinUp.exe)
堆棧與線程
kbn 顯示當前線程調用棧(含參數) 從底部查找含except的線程
~*kbn 顯示所有線程堆棧 定位阻塞線程(如長時間WAIT狀態)
.ecxr 切換到異常上下文 需先執行.exr -1
內存與資源
!vm 或 !memusage 虛擬/物理內存統計 檢測內存泄漏或碎片化
!heap -s 堆內存分析(用戶態) 檢查內存塊分配/釋放情況
!address [地址] 查看內存屬性(如是否可寫) 用于分析非法內存訪問
高級診斷
!locks 檢查內核鎖競爭 結合!cs分析死鎖
!handle -f 顯示句柄信息 排查資源泄漏(如未關閉的文件句柄)
!dlls -l 列出進程加載的DLL
- 更多常用命令windbg 常用命令詳解_bmvm.bpb-CSDN博客 ;WinDbg 命令三部曲:(一)WinDbg 命令手冊 - sangmado - 博客園
- 利用AI幫忙分析dump信息。
關鍵詞技巧:詳細分析下面的dump日志信息,并且再輸入哪些命令能夠更加詳細日志信息。附上!analyze -v信息
這樣向AI提問可以讓AI幫忙給出更多命令指導。
- 分析Dump的方法還需要繼續積累學習需要靠經驗。應用的Dump可以通過VS調試。
5.VS進行調試應用dump
后續再繼續補充更多分析dump的方法和VS進行調試應用dump的方法!

浙公網安備 33010602011771號