Skip to content

Commit ce875f0

Browse files
committed
added:crash core-dump support for windows
1 parent 7653f36 commit ce875f0

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

XEngine_Release/XEngine_Coredump/.gitignore

Whitespace-only changes.

XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <windows.h>
1616
#include <tchar.h>
1717
#include <io.h>
18+
#include <minidumpapiset.h>
1819
#else
1920
#include <unistd.h>
2021
#include <sys/wait.h>
@@ -123,6 +124,7 @@ extern XENGINE_LBCONFIG st_LoadbalanceCfg;
123124

124125
#ifdef _MSC_BUILD
125126
#pragma comment(lib,"Ws2_32.lib")
127+
#pragma comment(lib,"Dbghelp.lib")
126128
#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib")
127129
#pragma comment(lib,"XEngine_BaseLib/XEngine_Algorithm.lib")
128130
#pragma comment(lib,"XEngine_Core/XEngine_Core.lib")

XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,39 @@ static int ServiceApp_Deamon(int wait)
120120
#endif
121121
return 0;
122122
}
123+
#ifdef _MSC_BUILD
124+
LONG WINAPI Coredump_ExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers)
125+
{
126+
static int i = 0;
127+
XCHAR tszFileStr[MAX_PATH] = {};
128+
XCHAR tszTimeStr[128] = {};
129+
BaseLib_OperatorTime_TimeToStr(tszTimeStr);
130+
_xstprintf(tszFileStr, _X("./XEngine_Coredump/dumpfile_%s_%d.dmp"), tszTimeStr, i++);
123131

132+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_FATAL, _X("主程序:软件崩溃,写入dump:%s"), tszFileStr);
133+
134+
HANDLE hDumpFile = CreateFileA(tszFileStr, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
135+
if (INVALID_HANDLE_VALUE != hDumpFile)
136+
{
137+
MINIDUMP_EXCEPTION_INFORMATION st_DumpInfo = {};
138+
st_DumpInfo.ExceptionPointers = pExceptionPointers;
139+
st_DumpInfo.ThreadId = GetCurrentThreadId();
140+
st_DumpInfo.ClientPointers = TRUE;
141+
142+
// 写入 dump 文件
143+
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &st_DumpInfo, NULL, NULL);
144+
CloseHandle(hDumpFile);
145+
}
146+
return EXCEPTION_EXECUTE_HANDLER;
147+
}
148+
#endif
124149
int main(int argc, char** argv)
125150
{
126151
#ifdef _MSC_BUILD
127152
WSADATA st_WSAData;
128153
WSAStartup(MAKEWORD(2, 2), &st_WSAData);
154+
155+
SetUnhandledExceptionFilter(Coredump_ExceptionFilter);
129156
#endif
130157
bIsRun = true;
131158
int nRet = -1;

0 commit comments

Comments
 (0)