windbg (1) -- dump文件分析
由于程序不健全,经常会在程序里增加如下代码:
LONG WINAPI MyUnHandledExceptionFilter( struct _EXCEPTION_POINTERS* ExceptionInfo) { TCHAR szFileName[MAX_PATH] = {0}; SYSTEMTIME st = {0}; GetLocalTime(&st); _stprintf_s(szFileName, MAX_PATH, _T("exe-%04d-%02d-%02d-%02d-%02d-%02d.dmp"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); HANDLE hDumpFile = ::CreateFile( szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); MINIDUMP_EXCEPTION_INFORMATION dump = {0}; dump.ExceptionPointers = ExceptionInfo; dump.ThreadId = GetCurrentThreadId(); dump.ClientPointers = TRUE; MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dump, NULL, NULL); return EXCEPTION_EXECUTE_HANDLER; }
以在程序有未处理异常时生成dum文件,以保存程序现场。
当拿到xxxxx.dmp文件,先打开windbg. 再加载dump文件 (File->Open crash dump).
(如果有保存异常程序生成时的pdb文件在File->Symbol file path中添加pdb文件路径)
最后,只是输入:
!analyze -v
等待分析完成时,就可以看到出错的位置了。

浙公网安备 33010602011771号