Skip to content

Commit e43ef77

Browse files
committed
added:service app and management app core-dump supported
1 parent 3762de0 commit e43ef77

File tree

5 files changed

+55
-1
lines changed

5 files changed

+55
-1
lines changed

.github/workflows/msbuild.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ on:
44
push:
55
branches:
66
- develop
7+
paths:
8+
- 'XEngine_Source/**'
9+
- 'XEngine_Release/**'
710

811
jobs:
912
build:

XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,27 @@ BEGIN_MESSAGE_MAP(CXEngineAuthorizeAppDlg, CDialogEx)
4040
ON_BN_CLICKED(IDC_BUTTON2, &CXEngineAuthorizeAppDlg::OnBnClickedButton2)
4141
END_MESSAGE_MAP()
4242

43+
LONG WINAPI Coredump_ExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers)
44+
{
45+
static int i = 0;
46+
XCHAR tszFileStr[MAX_PATH] = {};
47+
XCHAR tszTimeStr[128] = {};
48+
BaseLib_OperatorTime_TimeToStr(tszTimeStr);
49+
_xstprintf(tszFileStr, _X("./XEngine_Coredump/dumpfile_%s_%d.dmp"), tszTimeStr, i++);
4350

51+
HANDLE hDumpFile = CreateFileA(tszFileStr, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
52+
if (INVALID_HANDLE_VALUE != hDumpFile)
53+
{
54+
MINIDUMP_EXCEPTION_INFORMATION st_DumpInfo = {};
55+
st_DumpInfo.ExceptionPointers = pExceptionPointers;
56+
st_DumpInfo.ThreadId = GetCurrentThreadId();
57+
st_DumpInfo.ClientPointers = TRUE;
58+
// 写入 dump 文件
59+
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &st_DumpInfo, NULL, NULL);
60+
CloseHandle(hDumpFile);
61+
}
62+
return EXCEPTION_EXECUTE_HANDLER;
63+
}
4464
// CXEngineAuthorizeAppDlg 消息处理程序
4565

4666
BOOL CXEngineAuthorizeAppDlg::OnInitDialog()
@@ -53,6 +73,7 @@ BOOL CXEngineAuthorizeAppDlg::OnInitDialog()
5373
SetIcon(m_hIcon, false); // 设置小图标
5474

5575
// TODO: 在此添加额外的初始化代码
76+
SetUnhandledExceptionFilter(Coredump_ExceptionFilter);
5677
HANDLE hMutex = CreateMutex(NULL, true, _T("XEngine_AuthorizeApp"));
5778
if (NULL != hMutex)
5879
{

XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#endif //PCH_H
1414
#include <json/json.h>
1515
#include <list>
16+
#include <minidumpapiset.h>
1617
using namespace std;
1718
#include <XEngine_Include/XEngine_CommHdr.h>
1819
#include <XEngine_Include/XEngine_Types.h>
@@ -69,6 +70,7 @@ extern LPCXSTR lpszStuType[2];
6970
#endif
7071
#endif
7172

73+
#pragma comment(lib,"Dbghelp.lib")
7274
#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib")
7375
#pragma comment(lib,"XEngine_Core/XEngine_OPenSsl.lib")
7476
#pragma comment(lib,"XEngine_Client/XClient_APIHelp.lib")

XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#ifdef _WINDOWS
33
#include <Windows.h>
44
#include <tchar.h>
5+
#include <minidumpapiset.h>
56
#else
67
#include <sys/types.h>
78
#include <sys/wait.h>
@@ -141,6 +142,7 @@ extern XENGINE_FUNCTIONSWITCH st_FunSwitch;
141142
#endif
142143
#endif
143144
#pragma comment(lib,"Ws2_32.lib")
145+
#pragma comment(lib,"Dbghelp.lib")
144146
#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib")
145147
#pragma comment(lib,"XEngine_Core/XEngine_Core.lib")
146148
#pragma comment(lib,"XEngine_Core/XEngine_ManagePool.lib")

XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ XHANDLE xhHttpPool = NULL;
2323

2424
XENGINE_SERVICECONFIG st_AuthConfig;
2525
XENGINE_FUNCTIONSWITCH st_FunSwitch;
26-
//update:not run ci test
26+
2727
void ServiceApp_Stop(int signo)
2828
{
2929
if (bIsRun)
@@ -94,11 +94,37 @@ static int ServiceApp_Deamon(int wait)
9494
return 0;
9595
}
9696

97+
#ifdef _MSC_BUILD
98+
LONG WINAPI Coredump_ExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers)
99+
{
100+
static int i = 0;
101+
XCHAR tszFileStr[MAX_PATH] = {};
102+
XCHAR tszTimeStr[128] = {};
103+
BaseLib_OperatorTime_TimeToStr(tszTimeStr);
104+
_xstprintf(tszFileStr, _X("./XEngine_Coredump/dumpfile_%s_%d.dmp"), tszTimeStr, i++);
105+
106+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_FATAL, _X("主程序:软件崩溃,写入dump:%s"), tszFileStr);
107+
HANDLE hDumpFile = CreateFileA(tszFileStr, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
108+
if (INVALID_HANDLE_VALUE != hDumpFile)
109+
{
110+
MINIDUMP_EXCEPTION_INFORMATION st_DumpInfo = {};
111+
st_DumpInfo.ExceptionPointers = pExceptionPointers;
112+
st_DumpInfo.ThreadId = GetCurrentThreadId();
113+
st_DumpInfo.ClientPointers = TRUE;
114+
// 写入 dump 文件
115+
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &st_DumpInfo, NULL, NULL);
116+
CloseHandle(hDumpFile);
117+
}
118+
return EXCEPTION_EXECUTE_HANDLER;
119+
}
120+
#endif
97121
int main(int argc, char** argv)
98122
{
99123
#ifdef _WINDOWS
100124
WSADATA st_WSAData;
101125
WSAStartup(MAKEWORD(2, 2), &st_WSAData);
126+
127+
SetUnhandledExceptionFilter(Coredump_ExceptionFilter);
102128
#endif
103129
bIsRun = true;
104130
int nRet = -1;

0 commit comments

Comments
 (0)