zoukankan      html  css  js  c++  java
  • C++ 程序崩溃时生成Dump文件

    #include <DbgHelp.h>
    
    //生产DUMP文件
    int GenerateMiniDump(HANDLE hFile, PEXCEPTION_POINTERS pExceptionPointers, PWCHAR pwAppName)
    {
    	BOOL bOwnDumpFile = FALSE;
    	HANDLE hDumpFile = hFile;
    	MINIDUMP_EXCEPTION_INFORMATION ExpParam;
    
    	typedef BOOL(WINAPI * MiniDumpWriteDumpT)(
    		HANDLE,
    		DWORD,
    		HANDLE,
    		MINIDUMP_TYPE,
    		PMINIDUMP_EXCEPTION_INFORMATION,
    		PMINIDUMP_USER_STREAM_INFORMATION,
    		PMINIDUMP_CALLBACK_INFORMATION
    		);
    
    	MiniDumpWriteDumpT pfnMiniDumpWriteDump = NULL;
    	HMODULE hDbgHelp = LoadLibrary(L"DbgHelp.dll");
    	if (hDbgHelp)
    		pfnMiniDumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");
    
    	if (pfnMiniDumpWriteDump)
    	{
    		if (hDumpFile == NULL || hDumpFile == INVALID_HANDLE_VALUE)
    		{
    			//TCHAR szPath[MAX_PATH] = { 0 };
    			TCHAR szFileName[MAX_PATH] = { 0 };
    			//TCHAR* szAppName = pwAppName;
    			TCHAR* szVersion = L"v1.0";
    			TCHAR dwBufferSize = MAX_PATH;
    			SYSTEMTIME stLocalTime;
    
    			GetLocalTime(&stLocalTime);
    			//GetTempPath(dwBufferSize, szPath);
    
    			//wsprintf(szFileName, L"%s%s", szPath, szAppName);
    			CreateDirectory(szFileName, NULL);
    
    			wsprintf(szFileName, L"%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp",
    				//szPath, szAppName, szVersion,
    				szVersion,
    				stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
    				stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond,
    				GetCurrentProcessId(), GetCurrentThreadId());
    			hDumpFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE,
    				FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);
    
    			bOwnDumpFile = TRUE;
    			OutputDebugString(szFileName);
    		}
    
    		if (hDumpFile != INVALID_HANDLE_VALUE)
    		{
    			ExpParam.ThreadId = GetCurrentThreadId();
    			ExpParam.ExceptionPointers = pExceptionPointers;
    			ExpParam.ClientPointers = FALSE;
    
    			pfnMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
    				hDumpFile, MiniDumpWithDataSegs, (pExceptionPointers ? &ExpParam : NULL), NULL, NULL);
    
    			if (bOwnDumpFile)
    				CloseHandle(hDumpFile);
    		}
    	}
    
    	if (hDbgHelp != NULL)
    		FreeLibrary(hDbgHelp);
    
    	return EXCEPTION_EXECUTE_HANDLER;
    }
    
    
    LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo)
    {
    	if (IsDebuggerPresent())
    	{
    		return EXCEPTION_CONTINUE_SEARCH;
    	}
    
    	return GenerateMiniDump(NULL, lpExceptionInfo, L"test");
    }
    
    
    int main()
    {
            //加入崩溃dump文件功能 
    	SetUnhandledExceptionFilter(ExceptionFilter);
    }
    
  • 相关阅读:
    2号团队-团队任务5:项目总结会
    课后作业4:个人总结
    2号团队-团队任务4:每日立会(2018-12-7)
    2号团队-团队任务4:每日立会(2018-12-6)
    2号团队-团队任务4:每日立会(2018-12-5)
    2号团队-团队任务4:每日立会(2018-12-4)
    2号团队-团队任务4:每日立会(2018-12-3)
    2号团队-团队任务4:每日立会(2018-11-30)
    2号团队-团队任务4:每日立会(2018-11-29)
    2号团队-团队任务4:每日立会(2018-11-28)
  • 原文地址:https://www.cnblogs.com/jkcx/p/6396270.html
Copyright © 2011-2022 走看看