HGBase中增加处理崩溃的模块HGCrash
This commit is contained in:
parent
90d5e1571a
commit
dec8a54a71
|
@ -9,6 +9,8 @@ HGBase_DesEncrypt
|
|||
HGBase_DesDecrypt
|
||||
|
||||
HGBase_MakeMd5
|
||||
HGBase_RegisterCrashFunc
|
||||
HGBase_MakeCrashFile
|
||||
|
||||
HGBase_CreateDll
|
||||
HGBase_DestroyDll
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
<ClCompile Include="..\..\..\modules\base\HGBase64.cpp" />
|
||||
<ClCompile Include="..\..\..\modules\base\HGBuffer.cpp" />
|
||||
<ClCompile Include="..\..\..\modules\base\HGConsole.cpp" />
|
||||
<ClCompile Include="..\..\..\modules\base\HGCrash.cpp" />
|
||||
<ClCompile Include="..\..\..\modules\base\HGDes.cpp" />
|
||||
<ClCompile Include="..\..\..\modules\base\HGDll.cpp" />
|
||||
<ClCompile Include="..\..\..\modules\base\HGEvent.cpp" />
|
||||
|
@ -47,6 +48,7 @@
|
|||
<ClInclude Include="..\..\..\modules\base\HGBase64.h" />
|
||||
<ClInclude Include="..\..\..\modules\base\HGBaseErr.h" />
|
||||
<ClInclude Include="..\..\..\modules\base\HGConsole.h" />
|
||||
<ClInclude Include="..\..\..\modules\base\HGCrash.h" />
|
||||
<ClInclude Include="..\..\..\modules\base\HGInc.h" />
|
||||
<ClInclude Include="..\..\..\modules\base\HGBuffer.h" />
|
||||
<ClInclude Include="..\..\..\modules\base\HGDef.h" />
|
||||
|
@ -145,7 +147,7 @@
|
|||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>HGBase.def</ModuleDefinitionFile>
|
||||
<AdditionalDependencies>gdiplus.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>gdiplus.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<PostBuildEvent>
|
||||
<Command>
|
||||
|
@ -171,7 +173,7 @@
|
|||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>HGBase.def</ModuleDefinitionFile>
|
||||
<AdditionalDependencies>gdiplus.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>gdiplus.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
|
||||
</Link>
|
||||
<PostBuildEvent>
|
||||
|
@ -196,7 +198,7 @@ copy $(OutDir)HGBase.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Comman
|
|||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>HGBase.def</ModuleDefinitionFile>
|
||||
<AdditionalDependencies>gdiplus.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>gdiplus.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<PostBuildEvent>
|
||||
<Command>
|
||||
|
@ -222,7 +224,7 @@ copy $(OutDir)HGBase.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Comman
|
|||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>HGBase.def</ModuleDefinitionFile>
|
||||
<AdditionalDependencies>gdiplus.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>gdiplus.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
|
||||
</Link>
|
||||
<PostBuildEvent>
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
#include "HGCrash.h"
|
||||
#include "HGInc.h"
|
||||
#if defined(HG_CMP_MSC)
|
||||
#include <Dbghelp.h>
|
||||
#endif
|
||||
|
||||
static HGCrashFunc g_crashFunc = NULL;
|
||||
static HGPointer g_crashParam = NULL;
|
||||
#if defined(HG_CMP_MSC)
|
||||
static _EXCEPTION_POINTERS* g_exceptionInfo = NULL;
|
||||
#endif
|
||||
|
||||
#if defined(HG_CMP_MSC)
|
||||
static LONG WINAPI UnhandledExceptionFilterEx(struct _EXCEPTION_POINTERS* exceptionInfo)
|
||||
{
|
||||
g_exceptionInfo = exceptionInfo;
|
||||
if (NULL != g_crashFunc)
|
||||
g_crashFunc(exceptionInfo->ExceptionRecord->ExceptionAddress, g_crashParam);
|
||||
g_exceptionInfo = NULL;
|
||||
|
||||
return EXCEPTION_EXECUTE_HANDLER;
|
||||
}
|
||||
#endif
|
||||
|
||||
HGResult HGAPI HGBase_RegisterCrashFunc(HGCrashFunc func, HGPointer param)
|
||||
{
|
||||
if (NULL == func)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
#if defined(HG_CMP_MSC)
|
||||
g_crashFunc = func;
|
||||
g_crashParam = param;
|
||||
SetUnhandledExceptionFilter(UnhandledExceptionFilterEx);
|
||||
return HGBASE_ERR_OK;
|
||||
#else
|
||||
return HGBASE_ERR_FAIL;
|
||||
#endif
|
||||
}
|
||||
|
||||
HGResult HGAPI HGBase_MakeCrashFile(const HGChar* filePath)
|
||||
{
|
||||
#if defined(HG_CMP_MSC)
|
||||
if (NULL == g_exceptionInfo)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
HANDLE hFile = CreateFileA(filePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if (INVALID_HANDLE_VALUE == hFile)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
MINIDUMP_EXCEPTION_INFORMATION mdei;
|
||||
mdei.ThreadId = GetCurrentThreadId();
|
||||
mdei.ExceptionPointers = g_exceptionInfo;
|
||||
mdei.ClientPointers = TRUE;
|
||||
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &mdei, NULL, NULL);
|
||||
CloseHandle(hFile);
|
||||
return HGBASE_ERR_OK;
|
||||
#else
|
||||
return HGBASE_ERR_FAIL;
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef __HGCRASH_H__
|
||||
#define __HGCRASH_H__
|
||||
|
||||
#include "HGDef.h"
|
||||
#include "HGBaseErr.h"
|
||||
|
||||
typedef void (*HGCrashFunc)(HGPointer crashAddr, HGPointer param);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGBase_RegisterCrashFunc(HGCrashFunc func, HGPointer param);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGBase_MakeCrashFile(const HGChar *filePath);
|
||||
|
||||
#endif /* __HGCRASH_H__ */
|
Loading…
Reference in New Issue