@@ -120,12 +120,39 @@ static int ServiceApp_Deamon(int wait)
120
120
#endif
121
121
return 0 ;
122
122
}
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++);
123
131
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
124
149
int main (int argc, char ** argv)
125
150
{
126
151
#ifdef _MSC_BUILD
127
152
WSADATA st_WSAData;
128
153
WSAStartup (MAKEWORD (2 , 2 ), &st_WSAData);
154
+
155
+ SetUnhandledExceptionFilter (Coredump_ExceptionFilter);
129
156
#endif
130
157
bIsRun = true ;
131
158
int nRet = -1 ;
0 commit comments