天下

记录修行的印记

DMP文件的生成和使用

#include <stdio.h>
#include 
<afxwin.h>
#include 
<dbghelp.h>

#pragma comment(lib, 
"Dbghelp.lib")


LONG WINAPI MyUnhandledFilter(
struct _EXCEPTION_POINTERS *lpExceptionInfo)
{
    LONG ret 
= EXCEPTION_EXECUTE_HANDLER;

    TCHAR szFileName[
64];
    SYSTEMTIME st;
    ::GetLocalTime(
&st);
    sprintf(szFileName, _T(
"%04d-%02d-%02d-%02d-%02d-%02d-%02d-%02d.dmp"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, rand()%100);

    HANDLE hFile 
= ::CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
    
if (hFile != INVALID_HANDLE_VALUE)
    {
        MINIDUMP_EXCEPTION_INFORMATION ExInfo;

        ExInfo.ThreadId 
= ::GetCurrentThreadId();
        ExInfo.ExceptionPointers 
= lpExceptionInfo;
        ExInfo.ClientPointers 
= false;

        
// write the dump

        BOOL bOK 
= MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL );

        
if (bOK)
        {
            printf(
"Create Dump File Success!\n");
        }
        
else
        {
            printf(
"MiniDumpWriteDump Failed: %d\n", GetLastError());
        }

        ::CloseHandle(hFile);
    }
    
else
    {
        printf(
"Create File %s Failed %d\n", szFileName, GetLastError());
    }
    
return ret;
}

int main()
{
    ::SetUnhandledExceptionFilter(MyUnhandledFilter);

    
int a = 0;
    
int b = 2;
    
int c = b/a;

    
return 0;
}

posted on 2011-01-10 20:49 天下 阅读(2003) 评论(0)  编辑 收藏 引用 所属分类: Win32


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(4)

随笔分类(378)

随笔档案(329)

链接

最新随笔

搜索

最新评论