windbg

 windbg

1.基本概念:DUMP文件

.DUMP文件,也可以叫CORE文件,或者叫進程內存鏡像,或者叫轉存文件。
.進程的整個內存在某一時刻的鏡像。
.通常是在程序異常終了時自動生成,或使用工具從運行中的進程中獲取的,反映該進程的一個內存映象(同時加上調試信息),主要是用來調試的。

2 產生dump文件
 windows7之後可以通過註冊表,來制定dump文件輸出路徑和dump文件類型


要開啓這個功能需要進行如下配置
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpFolder"="c:\\dumpfile"
"DumpType"=dword:00000002


3 符號庫的設置
SRV*E:\windbg\Symbol\SysSymbol*http://msdl.microsoft.com/download/symbols;srv*;E:\windbg\Symbol\UserSymbol

srv*表示是符號服務器,使用了一些複雜ID作爲版本標識。對於microsoft的符號文件,使用srv*是沒有問題的。對於應用程序符號文件夾,一般不要用srv*,否則導致找不到符號文件。除非使用symstore建立了應用符號服務器。關於symstore參考相關文檔


4 WindDbg主要以命令方式工作,主要有三類命令:標準命令,元命令和擴展命令。

標準命令
    標準命令用來提供適用於所有調試目標的基本調試功能。
    所有基本命令都是實現在WinDBG內部的, 執行這些命令時不需要加載任何擴展模塊。大多數標準命令是一兩個字符或者符號, 只有version等少數命令除。標準命令的第一個字符是不分大小寫的, 第二個字符可能區分大小寫。迄今爲止, WinDBG調試器共實現了130多條標準命令, 分爲60多個系列。爲了便於記憶, 可以根據功能將標準命令歸納爲如下18個子類。


5 用戶態調試(命令詳情)

!peb
查看進程環境信息,可查看進程所有模塊的基地址。
ln
將地址轉化成符號,如函數名。
uf
反彙編並顯示彙編代碼 。



例子:.結合SysLog 定位
System log中
障害が発生しているモジュール名: NvPROBaseAPIMgr.dll、
バージョン: 4.0.0.7、タイム スタンプ: 0x4d5332cb
例外コード: 0xc0000005
障害オフセット: 0x00042ec0


首先找到崩潰模塊基地址
0:000> !peb

    1130000 4d5332cb Feb 10 08:35:23 2011 C:\Program Files\NEC\UMF\Operations\Manager\bin\NvPROBaseAPIMgr.dll

通過基地址加偏移地址找到在該模塊的哪個位置
0:000> ln 1130000+00042ec0
e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c(78)
(01172eb0)   NvPROBaseAPIMgr!nvdFree+0x10   |  (01172f30) 
NvPROBaseAPIMgr!nvdAlloc

通過反彙編以及起始地址加偏移查看具體哪個語句出錯
0:000> uf NvPROBaseAPIMgr!nvdFree
NvPROBaseAPIMgr!nvdFree [e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c @ 73]:
   73 01172eb0(***) 56              push    esi
   76 01172eb1 8b742408        mov     esi,dword ptr [esp+8]
   76 01172eb5 85f6            test    esi,esi
   76 01172eb7 7452            je      NvPROBaseAPIMgr!nvdFree+0x5b (01172f0b)


NvPROBaseAPIMgr!nvdFree+0x9 [e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c @ 76]:
   76 01172eb9 57              push    edi
   76 01172eba 8d9b00000000    lea     ebx,[ebx]


NvPROBaseAPIMgr!nvdFree+0x10(***) [e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c @ 78]:
   78 01172ec0(***) f6460801     test    byte ptr [esi+8],1 
   78 01172ec4 8b3e            mov     edi,dword ptr [esi]
   78 01172ec6 7409            je      NvPROBaseAPIMgr!nvdFree+0x21 (01172ed1)

NvPROBaseAPIMgr!nvdFree+0x18 [e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c @ 79]:
   79 01172ec8 8b4610          mov     eax,dword ptr [esi+10h]
   79 01172ecb 50              push    eax
   79 01172ecc e804e4fbff      call    NvPROBaseAPIMgr!ILT+720(_nvcMemFree (011312d5)



通過e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c(78)
70 //jc dnode のリストを開放する
71 DWORD WINAPI
72 nvdFree(LPNVDNODE dphead)
73 {
74    LPNVDNODE dp, nextdp;
75
76    for (dp = dphead; dp; dp = nextdp) {
77       nextdp = dp->dn_dnext;
78       if (dp->dn_option & DN_COMPNAME) { ★ここでコアダンプ★
79          (void) nvcMemFree(dp->dn_compname);
80       }
81    略

96 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章