최종완료보고 버전
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
// DebugAssist.h: interface for the DebugAssist class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if defined(_WIN32) && !defined(_DEBUG)
|
||||
#ifndef DEBUGASSIST_H__
|
||||
#define DEBUGASSIST_H__
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <DbgHelp.h> // in Platform SDK
|
||||
//#include <c:\Program Files\Microsoft SDKs\Windows\v5.0\Include\DbgHelp.h>
|
||||
//or #include <c:\Program Files (x86)\Microsoft SDKs\Windows\v5.0\Include\DbgHelp.h>
|
||||
//or #include <c:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\DbgHelp.h>
|
||||
//or #include <c:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include\DbgHelp.h>
|
||||
#include <tchar.h>
|
||||
|
||||
|
||||
TCHAR g_szDbgModulePathName[2048] = {0,};
|
||||
TCHAR g_szDumpPathName[2048] = {0,};
|
||||
|
||||
LONG TopExceptionFilter(LPEXCEPTION_POINTERS pException)
|
||||
{
|
||||
HMODULE hDll = LoadLibrary(g_szDbgModulePathName);
|
||||
if (hDll == NULL)
|
||||
{
|
||||
OutputDebugString(TEXT("tps, ERROR, Can't found DbgHelp.dll file.\n"));
|
||||
return EXCEPTION_EXECUTE_HANDLER;
|
||||
}
|
||||
|
||||
MINIDUMP_EXCEPTION_INFORMATION exceptionInfo;
|
||||
exceptionInfo.ThreadId = GetCurrentThreadId();
|
||||
exceptionInfo.ExceptionPointers = pException;
|
||||
exceptionInfo.ClientPointers = NULL;
|
||||
|
||||
BOOL (WINAPI * fnWriteDump)(HANDLE, DWORD, ...);
|
||||
fnWriteDump = (BOOL (WINAPI *)(HANDLE, DWORD, ...))GetProcAddress(hDll, "MiniDumpWriteDump");
|
||||
if (fnWriteDump == NULL)
|
||||
{
|
||||
OutputDebugString(TEXT("tps, ERROR, Can't found MiniDumpWriteDump interface.\n"));
|
||||
return EXCEPTION_EXECUTE_HANDLER;
|
||||
}
|
||||
|
||||
HANDLE hFile = CreateFile(g_szDumpPathName, GENERIC_WRITE, FILE_SHARE_WRITE,
|
||||
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
fnWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile,
|
||||
MiniDumpNormal, &exceptionInfo, NULL, NULL);
|
||||
|
||||
FreeLibrary(hDll);
|
||||
CloseHandle(hFile);
|
||||
|
||||
return EXCEPTION_EXECUTE_HANDLER;
|
||||
}
|
||||
|
||||
void InitialDumpWriting(LPCTSTR pszDir = NULL, LPCTSTR pszPrefix = NULL)
|
||||
{
|
||||
TCHAR szPostFix[32];
|
||||
|
||||
SYSTEMTIME systemTime;
|
||||
GetLocalTime(&systemTime);
|
||||
|
||||
_stprintf(szPostFix, TEXT("_%.4d%.2d%.2d%.2d%.2d%.2d.dmp"), systemTime.wYear,
|
||||
systemTime.wMonth, systemTime.wDay, systemTime.wHour, systemTime.wMinute, systemTime.wSecond);
|
||||
|
||||
if (pszDir && pszPrefix)
|
||||
{
|
||||
// pszDir ex) "C:\\Temp\\"
|
||||
_tcscpy(g_szDbgModulePathName, pszDir);
|
||||
_tcscat(g_szDbgModulePathName, TEXT("dbghelp.dll"));
|
||||
|
||||
_tcscpy(g_szDumpPathName, pszDir);
|
||||
_tcscat(g_szDumpPathName, pszPrefix);
|
||||
_tcscat(g_szDumpPathName, szPostFix);
|
||||
}
|
||||
else
|
||||
{
|
||||
char szModuleFileName[2048];
|
||||
GetModuleFileName(NULL, szModuleFileName, sizeof(szModuleFileName));
|
||||
|
||||
char szDrive[_MAX_DRIVE], szDir[1024], szFileName[1024], szExt[1024];
|
||||
_splitpath_s(szModuleFileName, szDrive, _MAX_DRIVE, szDir, 1024, szFileName, 1024, szExt, 1024);
|
||||
|
||||
if (pszDir)
|
||||
{
|
||||
_tcscpy(g_szDbgModulePathName, pszDir);
|
||||
_tcscpy(g_szDumpPathName, pszDir);
|
||||
}
|
||||
else
|
||||
{
|
||||
_tcscpy(g_szDbgModulePathName, szDrive);
|
||||
_tcscat(g_szDbgModulePathName, szDir);
|
||||
_tcscpy(g_szDumpPathName, g_szDbgModulePathName);
|
||||
}
|
||||
|
||||
_tcscat(g_szDbgModulePathName, TEXT("dbghelp.dll"));
|
||||
|
||||
if (pszPrefix)
|
||||
{
|
||||
_tcscat(g_szDumpPathName, pszPrefix);
|
||||
_tcscat(g_szDumpPathName, szPostFix);
|
||||
}
|
||||
else
|
||||
{
|
||||
_tcscat(g_szDumpPathName, szFileName);
|
||||
_tcscat(g_szDumpPathName, szPostFix);
|
||||
}
|
||||
}
|
||||
|
||||
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)TopExceptionFilter);
|
||||
}
|
||||
|
||||
#endif // DEBUGASSIST_H__
|
||||
#endif // defined(_WIN32) && !defined(_DEBUG)
|
||||
Reference in New Issue
Block a user