zoukankan      html  css  js  c++  java
  • MiniDump产生工具

    1:分析程序异常等等信息,在入口处初始化即可

    //生成Dump文件信息 OS:Windows
    #pragma once
    
    #include <windows.h>
    #include <imagehlp.h>
    #if (_MSC_VER < 1700) // vs2010 and before version
    #include <stdlib.h>
    #else
    #include <tchar.h>
    #endif
    #include <ctime>
    #include <cstdio>
    
    #pragma comment(lib, "dbghelp.lib")
    
    
    class MiniDump
    {
    public:
    	MiniDump() = delete;
    	~MiniDump() = delete;
    
    	static LONG WINAPI RunUnhandledFilter(struct _EXCEPTION_POINTERS *lpExceptionInfo)
    	{
    		LONG ret = EXCEPTION_EXECUTE_HANDLER;
    		TCHAR szFileName[64];
    		SYSTEMTIME st;
    		::GetLocalTime(&st);
    		std::srand(static_cast<unsigned int>(std::time(0)));
    #if defined(UNICODE)
    		swprintf_s(szFileName, L"%d-%d-%d-%d-%d-%d-%d-%d.dmp", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, std::rand());
    #else
    		sprintf_s(szFileName, "%d-%d-%d-%d-%d-%d-%d-%d.dmp", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, std::rand());
    #endif
    
    		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
    #if !defined(FINALIDEALSEE)
    			BOOL bOK = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpWithFullMemory, &ExInfo, NULL, NULL);
    #else
    			BOOL bOK = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL);
    #endif
    			if (bOK)
    			{
    				printf("Create Dump File Success!
    ");
    			}
    			else
    			{
    				printf("MiniDumpWriteDump Failed: %d
    ", GetLastError());
    			}
    
    			::CloseHandle(hFile);
    		}
    		else
    		{
    #if defined(UNICODE)
    			wprintf(L"Create File %ls Failed %d
    ", szFileName, GetLastError());
    #else
    			printf("Create File %s Failed %d
    ", szFileName, GetLastError());
    #endif
    		}
    		//禁用对话框提示信息//
    		//FatalAppExit(-1, _T("Fatal Error, Check Dump File"));
    
    		return ret;
    	}
    
    	static void InitMinDump()
    	{
    		SetUnhandledExceptionFilter(RunUnhandledFilter);
    	}
    };
    
    作者:长风 Email:844064492@qq.com QQ群:607717453 Git:https://github.com/zhaohu19910409Dz 开源项目:https://github.com/OriginMEK/MEK 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。 如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    javascript设计模式小记
    静态iframe异步加载
    博客搬家分割线
    大数据学习之MapReduce篇
    IDEA 创建javaWeb以及Servlet
    数组定义 二维数组 数组遍历 查找
    201720181 JAVA实验站 第二周作业
    201720181 JAVA实验站 第三周作业
    201720181 团队名称 第一周 作业
    C#语言编写的基于directshow的音视频格式转换
  • 原文地址:https://www.cnblogs.com/zhaohu/p/7658319.html
Copyright © 2011-2022 走看看