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

  等待分析完成时,就可以看到出错的位置了。

posted @ 2012-04-19 09:18  Mingxx  阅读(575)  评论(0)    收藏  举报