@@ -116,39 +116,41 @@ size_t xrDebug::BuildStackTrace(EXCEPTION_POINTERS* exPtrs, char *buffer, size_t
116
116
return frameCount;
117
117
}
118
118
119
- void xrDebug::GatherInfo (const char *expression , const char *description , const char *arg0, const char *arg1 ,
120
- const char *file, int line, const char *function, char *assertionInfo )
119
+ void xrDebug::GatherInfo (char *assertionInfo , const ErrorLocation &loc , const char *expr ,
120
+ const char *desc, const char *arg1, const char *arg2 )
121
121
{
122
122
char *buffer = assertionInfo;
123
- bool extendedDesc = description && strchr (description, ' \n ' );
123
+ if (!expr)
124
+ expr = " <no expression>" ;
125
+ bool extendedDesc = desc && strchr (desc, ' \n ' );
124
126
char *prefix = " [error] " ;
125
127
buffer += sprintf (buffer, " \n FATAL ERROR\n\n " );
126
- buffer += sprintf (buffer, " %sExpression : %s\n " , prefix, expression );
127
- buffer += sprintf (buffer, " %sFunction : %s\n " , prefix, function );
128
- buffer += sprintf (buffer, " %sFile : %s\n " , prefix, file );
129
- buffer += sprintf (buffer, " %sLine : %d\n " , prefix, line );
128
+ buffer += sprintf (buffer, " %sExpression : %s\n " , prefix, expr );
129
+ buffer += sprintf (buffer, " %sFunction : %s\n " , prefix, loc. Function );
130
+ buffer += sprintf (buffer, " %sFile : %s\n " , prefix, loc. File );
131
+ buffer += sprintf (buffer, " %sLine : %d\n " , prefix, loc. Line );
130
132
if (extendedDesc)
131
133
{
132
- buffer += sprintf (buffer, " \n %s\n " , description );
133
- if (arg0 )
134
+ buffer += sprintf (buffer, " \n %s\n " , desc );
135
+ if (arg1 )
134
136
{
135
- buffer += sprintf (buffer, " %s\n " , arg0 );
136
- if (arg1 )
137
- buffer += sprintf (buffer, " %s\n " , arg1 );
137
+ buffer += sprintf (buffer, " %s\n " , arg1 );
138
+ if (arg2 )
139
+ buffer += sprintf (buffer, " %s\n " , arg2 );
138
140
}
139
141
}
140
142
else
141
143
{
142
- buffer += sprintf (buffer, " %sDescription : %s\n " , prefix, description );
143
- if (arg0 )
144
+ buffer += sprintf (buffer, " %sDescription : %s\n " , prefix, desc );
145
+ if (arg1 )
144
146
{
145
- if (arg1 )
147
+ if (arg2 )
146
148
{
147
- buffer += sprintf (buffer, " %sArgument 0 : %s\n " , prefix, arg0 );
148
- buffer += sprintf (buffer, " %sArgument 1 : %s\n " , prefix, arg1 );
149
+ buffer += sprintf (buffer, " %sArgument 0 : %s\n " , prefix, arg1 );
150
+ buffer += sprintf (buffer, " %sArgument 1 : %s\n " , prefix, arg2 );
149
151
}
150
152
else
151
- buffer += sprintf (buffer, " %sArguments : %s\n " , prefix, arg0 );
153
+ buffer += sprintf (buffer, " %sArguments : %s\n " , prefix, arg1 );
152
154
}
153
155
}
154
156
buffer += sprintf (buffer, " \n " );
@@ -183,15 +185,23 @@ void xrDebug::GatherInfo(const char *expression, const char *description, const
183
185
os_clipboard::copy_to_clipboard (assertionInfo);
184
186
}
185
187
186
- void xrDebug::DoExit (const std::string &message )
188
+ void xrDebug::Fatal (const ErrorLocation &loc, const char *format, ... )
187
189
{
188
- FlushLog ();
189
- MessageBox (NULL , message.c_str (), " Error" , MB_OK|MB_ICONERROR|MB_SYSTEMMODAL);
190
- TerminateProcess (GetCurrentProcess (), 1 );
190
+ string1024 desc;
191
+ va_list args;
192
+ va_start (args, format);
193
+ vsnprintf (desc, sizeof (desc), format, args);
194
+ va_end (args);
195
+ bool ignoreAlways = true ;
196
+ Fail (ignoreAlways, loc, nullptr , " fatal error" , desc);
191
197
}
192
198
193
- void xrDebug::Backend (const char *expression, const char *description, const char *arg0, const char *arg1,
194
- const char *file, int line, const char *function, bool &ignoreAlways)
199
+ void xrDebug::Fail (bool &ignoreAlways, const ErrorLocation &loc, const char *expr,
200
+ long hresult, const char *arg1, const char *arg2)
201
+ { Fail (ignoreAlways, loc, expr, xrDebug::ErrorToString (hresult), arg1, arg2); }
202
+
203
+ void xrDebug::Fail (bool &ignoreAlways, const ErrorLocation &loc, const char *expr,
204
+ const char *desc, const char *arg1, const char *arg2)
195
205
{
196
206
#ifdef PROFILE_CRITICAL_SECTIONS
197
207
static Lock lock (MUTEX_PROFILE_ID (xrDebug::Backend));
@@ -201,7 +211,7 @@ void xrDebug::Backend(const char *expression, const char *description, const cha
201
211
lock.Enter ();
202
212
ErrorAfterDialog = true ;
203
213
string4096 assertionInfo;
204
- GatherInfo (expression, description, arg0, arg1, file, line, function, assertionInfo );
214
+ GatherInfo (assertionInfo, loc, expr, desc, arg1, arg2 );
205
215
#ifdef USE_OWN_ERROR_MESSAGE_WINDOW
206
216
strcat (assertionInfo,
207
217
" \r\n "
@@ -252,6 +262,17 @@ void xrDebug::Backend(const char *expression, const char *description, const cha
252
262
lock.Leave ();
253
263
}
254
264
265
+ void xrDebug::Fail (bool &ignoreAlways, const ErrorLocation &loc, const char *expr,
266
+ const std::string &desc, const char *arg1, const char *arg2)
267
+ { Fail (ignoreAlways, loc, expr, desc.c_str (), arg1, arg2); }
268
+
269
+ void xrDebug::DoExit (const std::string &message)
270
+ {
271
+ FlushLog ();
272
+ MessageBox (NULL , message.c_str (), " Error" , MB_OK|MB_ICONERROR|MB_SYSTEMMODAL);
273
+ TerminateProcess (GetCurrentProcess (), 1 );
274
+ }
275
+
255
276
LPCSTR xrDebug::ErrorToString (long code)
256
277
{
257
278
const char *result = nullptr ;
@@ -265,57 +286,6 @@ LPCSTR xrDebug::ErrorToString(long code)
265
286
return result;
266
287
}
267
288
268
- void xrDebug::Error (long hr, const char *expr, const char *file, int line, const char *function, bool &ignoreAlways)
269
- {
270
- Backend (expr, ErrorToString (hr), nullptr , nullptr , file, line, function, ignoreAlways);
271
- }
272
-
273
- void xrDebug::Error (long hr, const char *expr, const char *e2 , const char *file, int line, const char *function,
274
- bool &ignoreAlways)
275
- {
276
- Backend (expr, ErrorToString (hr), e2 , 0 , file, line, function, ignoreAlways);
277
- }
278
-
279
- void xrDebug::Fail (const char *e1 , const char *file, int line, const char *function, bool &ignoreAlways)
280
- {
281
- Backend (e1 , " assertion failed" , 0 , 0 , file, line, function, ignoreAlways);
282
- }
283
-
284
- void xrDebug::Fail (const char *e1 , const std::string &e2 , const char *file, int line, const char *function,
285
- bool &ignoreAlways)
286
- {
287
- Backend (e1 , e2 .c_str (), 0 , 0 , file, line, function, ignoreAlways);
288
- }
289
-
290
- void xrDebug::Fail (const char *e1 , const char *e2 , const char *file, int line, const char *function,
291
- bool &ignoreAlways)
292
- {
293
- Backend (e1 , e2 , 0 , 0 , file, line, function, ignoreAlways);
294
- }
295
-
296
- void xrDebug::Fail (const char *e1 , const char *e2 , const char *e3 , const char *file, int line, const char *function,
297
- bool &ignoreAlways)
298
- {
299
- Backend (e1 , e2 , e3 , 0 , file, line, function, ignoreAlways);
300
- }
301
-
302
- void xrDebug::Fail (const char *e1 , const char *e2 , const char *e3 , const char *e4 , const char *file, int line,
303
- const char *function, bool &ignoreAlways)
304
- {
305
- Backend (e1 , e2 , e3 , e4 , file, line, function, ignoreAlways);
306
- }
307
-
308
- void xrDebug::Fatal (const char *file, int line, const char *function, const char *format, ...)
309
- {
310
- string1024 buffer;
311
- va_list p;
312
- va_start (p, format);
313
- vsprintf (buffer, format, p);
314
- va_end (p);
315
- bool ignoreAlways = true ;
316
- Backend (nullptr , " fatal error" , buffer, 0 , file, line, function, ignoreAlways);
317
- }
318
-
319
289
int out_of_memory_handler (size_t size)
320
290
{
321
291
xrDebug::OutOfMemoryCallbackFunc cb = xrDebug::GetOutOfMemoryCallback ();
@@ -513,8 +483,7 @@ void _terminate()
513
483
if (strstr (GetCommandLine (), " -silent_error_mode" ))
514
484
exit (-1 );
515
485
string4096 assertionInfo;
516
- xrDebug::GatherInfo (nullptr , " Unexpected application termination" , nullptr , nullptr ,
517
- DEBUG_INFO, assertionInfo);
486
+ xrDebug::GatherInfo (assertionInfo, DEBUG_INFO, nullptr , " Unexpected application termination" );
518
487
strcat (assertionInfo, " Press OK to abort execution\r\n " );
519
488
MessageBox (GetTopWindow (NULL ), assertionInfo, " Fatal Error" , MB_OK|MB_ICONERROR|MB_SYSTEMMODAL);
520
489
exit (-1 );
@@ -524,7 +493,7 @@ void _terminate()
524
493
static void handler_base (const char *reason)
525
494
{
526
495
bool ignoreAlways = false ;
527
- xrDebug::Backend ( nullptr , reason , nullptr , nullptr , DEBUG_INFO, ignoreAlways );
496
+ xrDebug::Fail (ignoreAlways, DEBUG_INFO , nullptr , reason, nullptr , nullptr );
528
497
}
529
498
530
499
static void invalid_parameter_handler (const wchar_t *expression, const wchar_t *function,
@@ -550,7 +519,7 @@ static void invalid_parameter_handler(const wchar_t *expression, const wchar_t *
550
519
line = __LINE__;
551
520
xr_strcpy (mbFile, __FILE__);
552
521
}
553
- xrDebug::Backend (mbExpression, " invalid parameter " , nullptr , nullptr , mbFile, line, mbFunction, ignoreAlways );
522
+ xrDebug::Fail (ignoreAlways, { mbFile, int ( line) , mbFunction}, mbExpression, " invalid parameter " );
554
523
}
555
524
556
525
static void pure_call_handler ()
0 commit comments