@@ -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
88111int 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