Skip to content

Commit 9f3918b

Browse files
committed
added:windows core-dump support
1 parent 3f3a41b commit 9f3918b

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

.github/workflows/macbuild.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ jobs:
1818
matrix:
1919
include:
2020
- os: macos-13
21-
- os: macos-14
2221
runs-on: ${{ matrix.os }}
2322

2423
steps:
@@ -58,7 +57,6 @@ jobs:
5857
./XEngine_LINEnv.sh -i 0
5958
6059
latest_tag=$(git ls-remote --tags --sort="v:refname" https://github.com/libxengine/libxengine.git | awk '{print $2}' | sed 's/refs\/tags\///' | tail -n 1)
61-
6260
wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_Mac_Arm64.zip
6361
unzip ./XEngine_Mac_Arm64.zip -d ./XEngine_Mac_Arm64
6462
cd XEngine_Mac_Arm64

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Hdr.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#ifdef _MSC_BUILD
1313
#include <Windows.h>
1414
#include <tchar.h>
15+
#include <minidumpapiset.h>
1516
#else
1617
#include <unistd.h>
1718
#include <sys/wait.h>
@@ -201,4 +202,5 @@ extern FILE* pSt_AFile;
201202
#pragma comment(lib,"XEngine_AVCodec/XEngine_AudioCodec.lib")
202203
#pragma comment(lib,"XEngine_SystemSdk/XEngine_SystemApi.lib")
203204
#pragma comment(lib,"Ws2_32.lib")
205+
#pragma comment(lib,"Dbghelp.lib")
204206
#endif

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_StreamMediaApp.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,40 @@ static int ServiceApp_Deamon()
141141
#endif
142142
return 0;
143143
}
144+
#ifdef _MSC_BUILD
145+
LONG WINAPI Coredump_ExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers)
146+
{
147+
static int i = 0;
148+
XCHAR tszFileStr[MAX_PATH] = {};
149+
XCHAR tszTimeStr[128] = {};
150+
BaseLib_Time_TimeToStr(tszTimeStr);
151+
_xstprintf(tszFileStr, _X("./XEngine_Coredump/dumpfile_%s_%d.dmp"), tszTimeStr, i++);
152+
153+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_FATAL, _X("主程序:软件崩溃,写入dump:%s"), tszFileStr);
154+
155+
HANDLE hDumpFile = CreateFileA(tszFileStr, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
156+
if (INVALID_HANDLE_VALUE != hDumpFile)
157+
{
158+
MINIDUMP_EXCEPTION_INFORMATION st_DumpInfo = {};
159+
st_DumpInfo.ExceptionPointers = pExceptionPointers;
160+
st_DumpInfo.ThreadId = GetCurrentThreadId();
161+
st_DumpInfo.ClientPointers = TRUE;
162+
163+
// 写入 dump 文件
164+
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &st_DumpInfo, NULL, NULL);
165+
CloseHandle(hDumpFile);
166+
}
167+
return EXCEPTION_EXECUTE_HANDLER;
168+
}
169+
#endif
144170

145171
int main(int argc, char** argv)
146172
{
147173
#ifdef _MSC_BUILD
148174
WSADATA st_WSAData;
149175
WSAStartup(MAKEWORD(2, 2), &st_WSAData);
150176

177+
SetUnhandledExceptionFilter(Coredump_ExceptionFilter);
151178
#ifndef _DEBUG
152179
if (setlocale(LC_ALL, ".UTF8") == NULL)
153180
{

0 commit comments

Comments
 (0)