Skip to content

Commit afdd053

Browse files
committed
added:coredump file support on windows
1 parent aa46298 commit afdd053

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

XEngine_Source/XEngine_MQServiceApp/MQService_Hdr.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <Windows.h>
44
#include <tchar.h>
55
#include <io.h>
6+
#include <minidumpapiset.h>
67
#else
78
#include <unistd.h>
89
#include <sys/wait.h>
@@ -98,6 +99,7 @@ extern MESSAGEQUEUE_DBCONFIG st_DBConfig;
9899
#pragma comment(lib,"XEngine_RfcComponents/RfcComponents_WSProtocol.lib")
99100
#pragma comment(lib,"XEngine_RfcComponents/RfcComponents_MQTTProtocol.lib")
100101
#pragma comment(lib,"Ws2_32.lib")
102+
#pragma comment(lib,"Dbghelp.lib")
101103
#ifdef _DEBUG
102104
#ifdef _WIN64
103105
#pragma comment(lib,"../x64/Debug/MQCore_ConfigModule.lib")

XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,37 @@ static int ServiceApp_Deamon(int wait)
8484
#endif
8585
return 0;
8686
}
87+
#ifdef _MSC_BUILD
88+
LONG WINAPI Coredump_ExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers)
89+
{
90+
static int i = 0;
91+
XCHAR tszFileStr[MAX_PATH] = {};
92+
XCHAR tszTimeStr[128] = {};
93+
BaseLib_OperatorTime_TimeToStr(tszTimeStr);
94+
_xstprintf(tszFileStr, _X("./XEngine_Coredump/dumpfile_%s_%d.dmp"), tszTimeStr, i++);
95+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_FATAL, _X("主程序:软件崩溃,写入dump:%s"), tszFileStr);
96+
HANDLE hDumpFile = CreateFileA(tszFileStr, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
97+
if (INVALID_HANDLE_VALUE != hDumpFile)
98+
{
99+
MINIDUMP_EXCEPTION_INFORMATION st_DumpInfo = {};
100+
st_DumpInfo.ExceptionPointers = pExceptionPointers;
101+
st_DumpInfo.ThreadId = GetCurrentThreadId();
102+
st_DumpInfo.ClientPointers = TRUE;
103+
// 写入 dump 文件
104+
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &st_DumpInfo, NULL, NULL);
105+
CloseHandle(hDumpFile);
106+
}
107+
return EXCEPTION_EXECUTE_HANDLER;
108+
}
109+
#endif
87110

88111
int main(int argc, char** argv)
89112
{
90113
#ifdef _WINDOWS
91114
WSADATA st_WSAData;
92115
WSAStartup(MAKEWORD(2, 2), &st_WSAData);
116+
117+
SetUnhandledExceptionFilter(Coredump_ExceptionFilter);
93118
#endif
94119
int nRet = -1;
95120
LPCXSTR lpszHTTPMime = _X("./XEngine_Config/HttpMime.types");

0 commit comments

Comments
 (0)