Skip to content

Commit af8467a

Browse files
committed
added:windows core dump generator support
1 parent 8ebbb31 commit af8467a

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

XEngine_Release/XEngine_Coredump/.gitignore

Whitespace-only changes.

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#ifdef _MSC_BUILD
1212
#include <Windows.h>
1313
#include <tchar.h>
14+
#include <Dbghelp.h>
1415
#else
1516
#include <unistd.h>
1617
#include <pthread.h>
@@ -203,4 +204,5 @@ extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig;
203204
#pragma comment(lib,"XEngine_AVCodec/XEngine_AudioCodec.lib")
204205
#pragma comment(lib,"XEngine_AVCodec/XEngine_AVHelp.lib")
205206
#pragma comment(lib,"Ws2_32.lib")
207+
#pragma comment(lib,"Dbghelp.lib")
206208
#endif

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,32 @@ void ServiceApp_Stop(int signo)
6868
#endif
6969
exit(0);
7070
}
71+
#ifdef _MSC_BUILD
72+
LONG WINAPI Coredump_ExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers)
73+
{
74+
static int i = 0;
75+
XCHAR tszFileStr[MAX_PATH] = {};
76+
XCHAR tszTimeStr[128] = {};
77+
BaseLib_OperatorTime_TimeToStr(tszTimeStr);
78+
_xstprintf(tszFileStr, _X("./XEngine_Coredump/dumpfile_%s_%d.dmp"), tszTimeStr, i++);
79+
80+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_FATAL, _X("主程序:软件崩溃,写入dump:%s"), tszFileStr);
81+
82+
HANDLE hDumpFile = CreateFileA(tszFileStr, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
83+
if (INVALID_HANDLE_VALUE != hDumpFile)
84+
{
85+
MINIDUMP_EXCEPTION_INFORMATION st_DumpInfo = {};
86+
st_DumpInfo.ExceptionPointers = pExceptionPointers;
87+
st_DumpInfo.ThreadId = GetCurrentThreadId();
88+
st_DumpInfo.ClientPointers = TRUE;
89+
90+
// 写入 dump 文件
91+
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &st_DumpInfo, NULL, NULL);
92+
CloseHandle(hDumpFile);
93+
}
94+
return EXCEPTION_EXECUTE_HANDLER;
95+
}
96+
#endif
7197
//LINUX守护进程
7298
static int ServiceApp_Deamon()
7399
{
@@ -104,6 +130,8 @@ int main(int argc, char** argv)
104130
#ifdef _MSC_BUILD
105131
WSADATA st_WSAData;
106132
WSAStartup(MAKEWORD(2, 2), &st_WSAData);
133+
134+
SetUnhandledExceptionFilter(Coredump_ExceptionFilter);
107135
#endif
108136
bIsRun = true;
109137
int nRet = -1;

0 commit comments

Comments
 (0)