1、如何抓取dump檔案。
這要分兩種情況:
第一種情況:如果是Vista或者是Windows2008作業系統就是一個簡單的事情,在工作管理員中,切換到"進程"選項卡,右鍵點擊你想要建立dump檔案的進程,然後選擇"Create Dump File"即可。如果你想要建立dump檔案的進程是w3wp.exe,可能會看到有很多w3wp,但不知道哪一個是你要要抓的網站,可以通過下需的命令查看,對於vista或win2008系統使用:%windir%/system32/inetsrv/appcmd list wp 而對於win2k3系統,你可以使用iisapp來查看。
第二種情況: 對於win2k3作業系統是沒有上面說到的功能的,當然上面的方法也是不完善的,因為它不能在程式崩潰的那一刻抓取到最適合的dump檔案。可以通過adplus命令來抓取。例如:
adplus -hang -pn w3wp.exe -o c:\dumps
該命令立刻把w3wp.exe的full dump抓取到c:\dumps檔案夾內。
adplus -hang -p 81388 -o c:\dumps
該命令立刻把81388這個進程的full dump抓取到c:\dumps檔案夾內。
adplus -crash -pn w3wp.exe -fullonfirst -o c:\dumps
adplus -crash -p 81388 -fullonfirst -o c:\dumps
該命令會通過監視進程w3wp.exe或81388的運行,在當第一次出現異常時記錄一次完整的dump
adplus -crash -pn w3wp.exe -o c:\dumps
該命令也是在w3wp.exe崩潰時記錄dump,但這是一個mini dump
#一些常用的參數:
-Crash:表示我捕捉的是一個Crash dump。
-p:指定要捕捉的進程ID。 -IIS表示我們捕捉IIS的所有進程。
-quiet:不彈出提示視窗
-fullonfirst:表示我希望在first chance時捕捉完整的dump資訊,也就是進程的所有完整資訊。
-o :後面跟著dump檔案的存放路徑
-c : 指定設定檔
#配置環境變數:
電腦-->屬性-->進階-->環境變數-->系統內容變數-->
_NT_SYMBOL_PATH C:"Windows"symbols
為Path系統內容變數增加C:\Program Files\Debugging Tools for Windows (x86)\
#還能通過指定設定檔來靈活使用adplus,例如可以指定clr發生某種異常時記錄dump等。
#解決在抓取dump過程出現"ActiveX 組件不能建立對象: 'Wscript.shell'" 錯誤的方法,運行如下命令:
regsvr32 %windir%"system32"WSHom.Ocx
#注意:當運行adplus抓取dump後,對應的w3wp.exe進程將會自動回收重啟新的進程
2、分析dump檔案。
0:000> .load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\SOS.dll //載入調試模組
0:000>!eeheap -gc //查看託管堆的情況(包括大小)
0:000>!dumpheap -min 85000 -stat //顯示大小大於85000的對角的統主資訊
0:000>!dumpheap -min 85000 //顯示大小大於85000的對角的統主資訊
0:000>!dumpheap -stat //該命令顯示程式中所有對象的統計資訊,顯示的大小是對象本身的大小,不包括對象裡面值的大小
0:000>!gcroot 0x34e9bee0 //來顯示一個執行個體的所屬關係
0:000>!dumpheap -mt 790fcb30 //該命令顯示MethodTable 790fcb30的詳細資料
0:000>!DumpArray //查看數組資訊
0:000>!ObjSize 012a1ba4 //對象實際在記憶體中的大小
0:000>lm //查看載入了哪些模組
0:000>!dumpmt -md 00976d48 //得到類的成員函數詳細資料
相關連結:
Windbg 用法
如何安裝WinDbg並得到第一個dump檔案
WinDbg初始體驗,問題來了怎麼辦?
WinDbg初始體驗2,抓住不放的惡棍(OutOfMemory案例分析Ⅰ)
WinDbg初始體驗3,剪不斷的鐵鏈(OutOfMemory案例分析Ⅱ)