#include
#pragma comment(lib, "dbghelp.lib")
#define dmp_file_path "d:\\mydmp"
long winapi myunhandledexceptfiltercallback
(struct _exception_pointers * lpexceptioninfo)
; systemtime currenttime;
::getlocaltime
(¤ttime)
;sprintf
(strdumpfile,
"%s\\%02d-%02d-%02d.%03d.dmp"
,dmp_file_path,
currenttime.whour,
currenttime.wminute,
currenttime.wsecond,currenttime.wmilliseconds)
; handle hdumpfile =
createfile
(strdumpfile, generic_write,0,
null
, create_always,file_attribute_normal ,
null);
//if
(hdumpfile!=
null
)return exception_execute_handler;
//表示我已經處理了異常,可以優雅地結束了
}bool preventunhandledexceptfilter()
; dword dworgentryaddr =
(dword) pexceptfun;
dworgentryaddr +=5
;// add 5 for 5 op-codes for jmp far
void
*pnewfunc =
&myunhandledexceptfiltercallback;
dword dwnewentryaddr =
(dword) pnewfunc;
dword dwrelativeaddr = dwnewentryaddr - dworgentryaddr;
newjump[0]
=0xe9
;// jmp absolute
memcpy
(&newjump[1]
,&dwrelativeaddr,
sizeof
(pnewfunc));
size_t byteswritten;
bool bret =
writeprocessmemory
(getcurrentprocess()
, pexceptfun, newjump,
sizeof
(pnewfunc)+1
,&byteswritten)
;return bret;
}static
void
setexcepthook()
//程式初始化的時候呼叫該函式即可
file->symbol file path
設定pdb檔案路徑,若是有本地編譯生成的可不設定,會自動搜尋;(必須有生成的pdb檔案否則無法分析)
開啟指定dmp檔案
輸入指令!analyze -v 即可分析,等待分析需要一段時間。
windbg 分析dmp 之一
1.ctrl d開啟dmp 或者直接把dmp拖到視窗 2.ctrl s輸入 一般是拷貝 符號檔案位址,alt r勾選reload選項,enter 3.symchk,檢查符號 4.lm,核對符號 5.kb,顯示堆疊 6.如果顯示的是ntdll dbgbreakpoint 哎,已經不是第一現場 接著看7...
使用windbg分析dmp檔案定位程式bug
本文編寫了乙個簡單能產生除數為0異常的程式,讓其執行,產生崩潰,通過drwtsn產生dmp檔案,然後通過windbg分析dmp檔案,定位程式bug。目的 學習windbg基本功能使用。程式源 void crash void void main void 編譯環境 vc 6.0 編譯器設定 這一步設定...
使用WinDbg分析死鎖
using system using system.threading private void test1 start console.readkey console.writeline exit test1 private void test2 0 000 e clrstack os threa...