原文:
https://blog.csdn.net/cc93691810/article/details/85108148
最近在進一步學習support技能的時候,了解到分析Dump的重要性,經過學習,做一些筆記。
一、什么是Dump文件。
Dump文件時進程的內存鏡像。可以把程序的執行狀態保存到Dump文件中。Dump文件分為內核模式Dump和用戶模式Dump。其中內核模式Dump是操作系統創建的崩潰轉儲,例如藍屏Dump。而在我們調試或Troubleshooting過程中使用的Dump是用戶模式Dump,又分為Full Dump和Mini Dump。Full Dump包含了某個進程完整的地址空間數據,以及許多用於調試的信息。而Mini Dump根據需要可以包含不同的信息,有的可能只包含某個縣城和部分模塊的信息。
二、創建Dump的方法和工具
1.任務管理器。
在Windows Server 2008以上版本的系統中,可以利用任務管理器直接創建Dump。方法是打開任務管理器->右鍵目標進程->Create Dump File,就可以創建出Dump文件了。這個方法不常用,據說因為會涉及到32位和64位環境對內存尋址的影響。
2.ProcDump.exe
ProcDump是一個可以用於診斷多種問題的命令行工具,它可以在沒有任何異常發生的時候, 捕獲Dump用於分析。它最大的特點是可以針對CPU使用率來篩選捕獲Dump,這個功能在處理間歇性問題時有奇效。比如系統或App沒有發生crash或hang,但是在某個階段中CPU占用率超高,這個時候就可以用ProcDump來設置條件捕獲Dump用於找出哪個進程是造成CPU占用率高的原因。
ProcDump的下載地址為ProcDump下載及介紹 ,在同一頁中還有對於ProcDump的命令的詳細說明。
如圖是一個實際使用的例子,在cmd窗口,進入ProcDump.exe文件夾,輸入命令procdump.exe -ma 6612, 就可以獲取Process ID為6612的Full Dump文件。
再例如命令:
procdump -ma -c 50 -s 3 -n 2 5844(Process Name or PID)
-ma 生成full dump, 即包括進程的所有內存. 默認的dump格式包括線程和句柄信息.
-c 在CPU使用率到達這個閥值的時候, 生成dump文件.
-s CPU閥值必須持續多少秒才抓取dump文件.
-n 在該工具退出之前要抓取多少個dump文件.
對於ProcDump的進一步了解可以閱讀下載頁面上的介紹,也可以參照介紹一個好用的抓取dump的工具-ProcDump
3.DebugDiag 2 collection
這是Debug Diagnostics Tools 2中的收集Dump的工具,這個Tools里面還有DebugDiag 2 analysis可以用於Dump文件的分析,我們在后面會提到。
DebugDiag下載地址為DebugDiag 下載。它可以在App發生Crash或Hang時,自動轉存Dump文件用於分析。DebugDiag collection的使用是通過設置rule來自動抓取Dump文件。也可以手動抓取Process的Dump文件。其具體操作可以參照DebugDiag簡介
三、Dump文件分析工具
1.DebugDiag 2 analysis。這個就是上文中提到的Debug Diagnostics Tools 2 中的一部分,用於分析Dump。這個工具操作起來比較傻瓜式,不許要過多輸入命令,只需要將Dump文件導入就會自動出現分析結果。
打開Debugdiag工具,在Tools->Options and Settings->Folders and Search Paths->Symbol Search Path For Analysis里填入:
SRVf:\localsymbolshttp://msdl.microsoft.com/download/symbols
其中f:\localsymbols可以用硬盤中的目錄替代,http://msdl.microsoft.com/download/symbols是微軟公用symbol的URL,不用改變。
在Advanced Analysis頁中,選擇Crash/Hang Analyzers,並點擊Add Files…按鈕選擇生成出的dump文件(后綴名為.dmp)。Debugdiag會因此分析dump文件並產生報告。
2.WinDbg
WinDbg也是微軟公司的用於軟件開發調試的工具,在分析Dump文件領域受到廣泛的使用。其下載地址為官方下載地址,其是一個SDK中的一個組成部分,也可以百度之進行單獨下載。
WinDbg下載后應該是一個msi文件,在win7版本以上操作系統中可以直接雙擊安裝。安裝后在開始菜單中就可以選擇WinDbg使用了。
在使用WinDbg時第一步需要做的就是設置符號文件的位置。符號路徑設置:
[File]-[Symbol File Path]或直接快捷鍵Ctrl+S在彈出的窗口中輸入你的符號路徑,路徑的格式只要符合Windows操作系統路徑格式即可,路徑可以多個,中間以分號間隔,d:\symbols\win2k3_en;
Windbg可以自動到Microsoft的服務器上下載符號表文件(.dbg或.pdb,有時DLL和EXE也會下載),只要在符合表路徑里做如下設置:srvd:\symbolslocalhttp://msdl.microsoft.com/download/symbols,這樣如果相關符號表在d:\symbolslocal目錄沒有找到的話,Windbg會自動在Microsoft的Symbol Servers上下載。
如果你是調試自己的應用程序的話,建議你將自己應用程序的*.pdb文件的路徑放在前面這樣對Windbg來說查找起來比較快。如:在windbg的file/symbol file path對話框里輸入以下文字,以便自動加載和下載符號C:\WINDOWS\Symbols;d:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\symbols;.sympath SRVd:\localsymbolshttp://msdl.microsoft.com/download/symbols
更多關於安裝和配置WinDbg的symbol可以參考鏈接。
在命令行中配置好symbol之后,需要用到!sym noisy和.reload命令
然后就可以根據需求在菜單中選擇需要進行的操作了
由於WinDbg相比於DebugDiag而言沒有那么一鍵操作,因此還需要用到命令行來進行分析,主要的命令是!analyze -v用於自動分析指令。此外還有許多命令,需要在以后的學習中進一步掌握。可以參考的資料有windbg分析dump操作流程以及使用Windbg解析dump文件