ReactOS 0.4.15-dev-7842-g558ab78
dbgrpt.cpp File Reference
#include <crtdbg.h>
#include <stdio.h>
#include <signal.h>
#include <windows.h>
Include dependency graph for dbgrpt.cpp:

Go to the source code of this file.

Classes

struct  dbgrpt_char_traits< char >
 
struct  dbgrpt_char_traits< wchar_t >
 

Macros

#define DBGRPT_MAX_BUFFER_SIZE   4096
 
#define DBGRPT_ASSERT_PREFIX_MESSAGE   "Assertion failed: "
 
#define DBGRPT_ASSERT_PREFIX_NOMESSAGE   "Assertion failed!"
 
#define DBGRPT_STRING_TOO_LONG   "_CrtDbgReport: String too long"
 

Typedefs

typedef int(WINAPItMessageBoxW) (_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
 
typedef dbgrpt_char_traits< charachar_traits
 
typedef dbgrpt_char_traits< wchar_twchar_traits
 

Functions

static HMODULE _CrtGetUser32 ()
 
static tMessageBoxW _CrtGetMessageBox ()
 
template<typename char_t >
static int _CrtDbgReportWindow (int reportType, const char_t *filename, int linenumber, const char_t *moduleName, const char_t *message)
 
template<typename char_t >
static int _CrtEnterDbgReport (int reportType, const char_t *filename, int linenumber)
 
static void _CrtLeaveDbgReport (int reportType)
 
EXTERN_C int __cdecl _CrtSetReportMode (int reportType, int reportMode)
 
EXTERN_C _HFILE __cdecl _CrtSetReportFile (int reportType, _HFILE reportFile)
 
template<typename char_t >
static BOOL _CrtDbgReportToFile (HANDLE hFile, const char_t *szMsg)
 
template<typename char_t >
static int _CrtHandleDbgReport (int reportType, const char_t *szCompleteMessage, const char_t *szFormatted, const char_t *filename, int linenumber, const char_t *moduleName)
 
EXTERN_C int __cdecl _VCrtDbgReportA (int reportType, const char *filename, int linenumber, const char *moduleName, const char *format, va_list arglist)
 
EXTERN_C int __cdecl _VCrtDbgReportW (int reportType, const wchar_t *filename, int linenumber, const wchar_t *moduleName, const wchar_t *format, va_list arglist)
 
EXTERN_C int __cdecl _CrtDbgReportV (int reportType, const char *filename, int linenumber, const char *moduleName, const char *format, va_list arglist)
 
EXTERN_C int __cdecl _CrtDbgReportWV (int reportType, const wchar_t *filename, int linenumber, const wchar_t *moduleName, const wchar_t *format, va_list arglist)
 
EXTERN_C int __cdecl _CrtDbgReport (int reportType, const char *filename, int linenumber, const char *moduleName, const char *format,...)
 
EXTERN_C int __cdecl _CrtDbgReportW (int reportType, const wchar_t *filename, int linenumber, const wchar_t *moduleName, const wchar_t *format,...)
 

Variables

static long _CrtInAssert = -1
 
static int _CrtModeOutputFormat [_CRT_ERRCNT]
 
static const wchar_t_CrtModeMessages [_CRT_ERRCNT]
 
static _HFILE _CrtReportFiles [_CRT_ERRCNT]
 
static HMODULE _CrtUser32Handle = NULL
 
static tMessageBoxW _CrtMessageBoxW = NULL
 

Macro Definition Documentation

◆ DBGRPT_ASSERT_PREFIX_MESSAGE

#define DBGRPT_ASSERT_PREFIX_MESSAGE   "Assertion failed: "

Definition at line 23 of file dbgrpt.cpp.

◆ DBGRPT_ASSERT_PREFIX_NOMESSAGE

#define DBGRPT_ASSERT_PREFIX_NOMESSAGE   "Assertion failed!"

Definition at line 24 of file dbgrpt.cpp.

◆ DBGRPT_MAX_BUFFER_SIZE

#define DBGRPT_MAX_BUFFER_SIZE   4096

Definition at line 22 of file dbgrpt.cpp.

◆ DBGRPT_STRING_TOO_LONG

#define DBGRPT_STRING_TOO_LONG   "_CrtDbgReport: String too long"

Definition at line 25 of file dbgrpt.cpp.

Typedef Documentation

◆ achar_traits

Definition at line 86 of file dbgrpt.cpp.

◆ tMessageBoxW

typedef int(WINAPI * tMessageBoxW) (_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)

Definition at line 52 of file dbgrpt.cpp.

◆ wchar_traits

Definition at line 87 of file dbgrpt.cpp.

Function Documentation

◆ _CrtDbgReport()

EXTERN_C int __cdecl _CrtDbgReport ( int  reportType,
const char filename,
int  linenumber,
const char moduleName,
const char format,
  ... 
)

Definition at line 464 of file dbgrpt.cpp.

471{
473 int result;
474
476 result = _VCrtDbgReportA(reportType, filename, linenumber, moduleName, format, arglist);
478 return result;
479}
char * va_list
Definition: acmsvcex.h:78
#define va_end(ap)
Definition: acmsvcex.h:90
#define va_start(ap, A)
Definition: acmsvcex.h:91
EXTERN_C int __cdecl _VCrtDbgReportA(int reportType, const char *filename, int linenumber, const char *moduleName, const char *format, va_list arglist)
Definition: dbgrpt.cpp:314
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLuint64EXT * result
Definition: glext.h:11304
const char * filename
Definition: ioapi.h:137
va_lists_t arglist[FMT_ARGMAX+1]
Definition: format.c:284

◆ _CrtDbgReportToFile()

template<typename char_t >
static BOOL _CrtDbgReportToFile ( HANDLE  hFile,
const char_t *  szMsg 
)
inlinestatic

Definition at line 259 of file dbgrpt.cpp.

260{
261 typedef dbgrpt_char_traits<char_t> traits;
262
264 return FALSE;
265
268 else if (hFile == _CRTDBG_FILE_STDERR)
270
271 DWORD cbMsg = (DWORD)(traits::StringLength(szMsg) * sizeof(char_t));
272 return ::WriteFile(hFile, szMsg, cbMsg, &cbMsg, NULL);
273}
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:203
#define _CRTDBG_FILE_STDOUT
Definition: crtdbg.h:31
#define _CRTDBG_FILE_STDERR
Definition: crtdbg.h:32
#define _CRTDBG_INVALID_HFILE
Definition: crtdbg.h:29
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
unsigned long DWORD
Definition: ntddk_ex.h:95
_In_ HANDLE hFile
Definition: mswsock.h:90
#define DWORD
Definition: nt_native.h:44
#define STD_OUTPUT_HANDLE
Definition: winbase.h:268
#define STD_ERROR_HANDLE
Definition: winbase.h:269

◆ _CrtDbgReportV()

EXTERN_C int __cdecl _CrtDbgReportV ( int  reportType,
const char filename,
int  linenumber,
const char moduleName,
const char format,
va_list  arglist 
)

Definition at line 438 of file dbgrpt.cpp.

445{
446 return _VCrtDbgReportA(reportType, filename, linenumber, moduleName, format, arglist);
447}

◆ _CrtDbgReportW()

EXTERN_C int __cdecl _CrtDbgReportW ( int  reportType,
const wchar_t filename,
int  linenumber,
const wchar_t moduleName,
const wchar_t format,
  ... 
)

Definition at line 483 of file dbgrpt.cpp.

490{
492 int result;
493
495 result = _VCrtDbgReportW(reportType, filename, linenumber, moduleName, format, arglist);
497 return result;
498}
EXTERN_C int __cdecl _VCrtDbgReportW(int reportType, const wchar_t *filename, int linenumber, const wchar_t *moduleName, const wchar_t *format, va_list arglist)
Definition: dbgrpt.cpp:376

◆ _CrtDbgReportWindow()

template<typename char_t >
static int _CrtDbgReportWindow ( int  reportType,
const char_t *  filename,
int  linenumber,
const char_t *  moduleName,
const char_t *  message 
)
static

Definition at line 157 of file dbgrpt.cpp.

158{
159 typedef dbgrpt_char_traits<char_t> traits;
160
161 wchar_t szCompleteMessage[DBGRPT_MAX_BUFFER_SIZE] = {0};
162 wchar_t LineBuffer[20] = {0};
163
164 if (filename && !filename[0])
165 filename = NULL;
166 if (moduleName && !moduleName[0])
167 moduleName = NULL;
168 if (message && !message[0])
169 message = NULL;
170 if (linenumber)
171 _itow(linenumber, LineBuffer, 10);
172
173 _snwprintf(szCompleteMessage,
174 _countof(szCompleteMessage) - 1,
175 traits::szAssertionMessage,
176 _CrtModeMessages[reportType],
177 moduleName ? L"\nModule: " : L"", moduleName ? moduleName : traits::szEmptyString,
178 filename ? L"\nFile: " : L"", filename ? filename : traits::szEmptyString,
179 LineBuffer[0] ? L"\nLine: " : L"", LineBuffer[0] ? LineBuffer : L"",
180 message ? L"\n\n" : L"", message ? message : traits::szEmptyString);
181
182 if (IsDebuggerPresent())
183 {
184 OutputDebugStringW(szCompleteMessage);
185 }
186
187 tMessageBoxW messageBox = _CrtGetMessageBox();
188 if (!messageBox)
189 return (IsDebuggerPresent() ? IDRETRY : IDABORT);
190
191 // TODO: If we are not interacive, add MB_SERVICE_NOTIFICATION
192 return messageBox(NULL, szCompleteMessage, L"ReactOS C++ Runtime Library",
194}
#define DBGRPT_MAX_BUFFER_SIZE
Definition: dbgrpt.cpp:22
int(WINAPI * tMessageBoxW)(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
Definition: dbgrpt.cpp:52
static tMessageBoxW _CrtGetMessageBox()
Definition: dbgrpt.cpp:139
static const wchar_t * _CrtModeMessages[_CRT_ERRCNT]
Definition: dbgrpt.cpp:37
void WINAPI SHIM_OBJ_NAME() OutputDebugStringW(LPCWSTR lpOutputString)
Definition: ignoredbgout.c:23
_CRTIMP wchar_t *__cdecl _itow(_In_ int _Value, _Pre_notnull_ _Post_z_ wchar_t *_Dest, _In_ int _Radix)
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
#define L(x)
Definition: ntvdm.h:50
#define _countof(array)
Definition: sndvol32.h:68
Definition: tftpd.h:60
BOOL WINAPI IsDebuggerPresent(void)
Definition: debugger.c:580
#define MB_SETFOREGROUND
Definition: winuser.h:814
#define MB_ICONHAND
Definition: winuser.h:788
#define MB_TASKMODAL
Definition: winuser.h:816
#define MB_ABORTRETRYIGNORE
Definition: winuser.h:791
#define IDABORT
Definition: winuser.h:832
#define IDRETRY
Definition: winuser.h:833

Referenced by _CrtHandleDbgReport().

◆ _CrtDbgReportWV()

EXTERN_C int __cdecl _CrtDbgReportWV ( int  reportType,
const wchar_t filename,
int  linenumber,
const wchar_t moduleName,
const wchar_t format,
va_list  arglist 
)

Definition at line 451 of file dbgrpt.cpp.

458{
459 return _VCrtDbgReportW(reportType, filename, linenumber, moduleName, format, arglist);
460}

◆ _CrtEnterDbgReport()

template<typename char_t >
static int _CrtEnterDbgReport ( int  reportType,
const char_t *  filename,
int  linenumber 
)
static

Definition at line 197 of file dbgrpt.cpp.

198{
199 typedef dbgrpt_char_traits<char_t> traits;
200
201 if (reportType < 0 || reportType >= _CRT_ERRCNT)
202 return FALSE;
203
204 if (reportType == _CRT_ASSERT)
205 {
207 {
208 char LineBuffer[20] = {0};
209
210 _itoa(linenumber, LineBuffer, 10);
211
212 OutputDebugStringA("Nested Assert from File: ");
213 traits::OutputDebugString(filename ? filename : traits::szUnknownFile);
214 OutputDebugStringA(", Line: ");
215 OutputDebugStringA(LineBuffer);
216 OutputDebugStringA("\n");
217
218 _CrtDbgBreak();
219
221 return FALSE;
222 }
223 }
224 return TRUE;
225}
#define _CRT_ASSERT
Definition: crtdbg.h:21
#define _CRT_ERRCNT
Definition: crtdbg.h:22
#define _CrtDbgBreak()
Definition: crtdbg.h:102
static long _CrtInAssert
Definition: dbgrpt.cpp:28
#define TRUE
Definition: types.h:120
void WINAPI SHIM_OBJ_NAME() OutputDebugStringA(LPCSTR lpOutputString)
Definition: ignoredbgout.c:18
_CRTIMP char *__cdecl _itoa(_In_ int _Value, _Pre_notnull_ _Post_z_ char *_Dest, _In_ int _Radix)
long __cdecl _InterlockedIncrement(_Interlocked_operand_ long volatile *_Addend)
long __cdecl _InterlockedDecrement(_Interlocked_operand_ long volatile *_Addend)

Referenced by _VCrtDbgReportA(), and _VCrtDbgReportW().

◆ _CrtGetMessageBox()

static tMessageBoxW _CrtGetMessageBox ( )
static

Definition at line 139 of file dbgrpt.cpp.

140{
142
144 {
146 if (proc == NULL)
148
150 }
151
153}
static tMessageBoxW _CrtMessageBoxW
Definition: dbgrpt.cpp:54
static HMODULE _CrtGetUser32()
Definition: dbgrpt.cpp:121
#define GetProcAddress(x, y)
Definition: compat.h:753
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
static int mod
Definition: i386-dis.c:1288
void * _InterlockedCompareExchangePointer(_Interlocked_operand_ void *volatile *_Destination, void *_Exchange, void *_Comparand)
static HANDLE proc()
Definition: pdb.c:34

Referenced by _CrtDbgReportWindow().

◆ _CrtGetUser32()

static HMODULE _CrtGetUser32 ( )
static

Definition at line 121 of file dbgrpt.cpp.

122{
123 if (_CrtUser32Handle == NULL)
124 {
125 HMODULE mod = LoadLibraryExW(L"user32.dll", NULL, 0 /* NT6+: LOAD_LIBRARY_SEARCH_SYSTEM32 */);
126 if (mod == NULL)
128
130 {
133 }
134 }
135
137}
static HMODULE _CrtUser32Handle
Definition: dbgrpt.cpp:53
#define FreeLibrary(x)
Definition: compat.h:748
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
Definition: loader.c:288
HANDLE HMODULE
Definition: typedefs.h:77

Referenced by _CrtGetMessageBox().

◆ _CrtHandleDbgReport()

template<typename char_t >
static int _CrtHandleDbgReport ( int  reportType,
const char_t *  szCompleteMessage,
const char_t *  szFormatted,
const char_t *  filename,
int  linenumber,
const char_t *  moduleName 
)
static

Definition at line 276 of file dbgrpt.cpp.

278{
279 typedef dbgrpt_char_traits<char_t> traits;
280
281 if (_CrtModeOutputFormat[reportType] & _CRTDBG_MODE_FILE)
282 {
283 _CrtDbgReportToFile<char_t>(_CrtReportFiles[reportType], szCompleteMessage);
284 }
285
287 {
288 traits::OutputDebugString(szCompleteMessage);
289 }
290
291 if (_CrtModeOutputFormat[reportType] & _CRTDBG_MODE_WNDW)
292 {
293 int nResult = _CrtDbgReportWindow(reportType, filename, linenumber, moduleName, szFormatted);
294 switch (nResult)
295 {
296 case IDRETRY:
297 return TRUE;
298 case IDIGNORE:
299 default:
300 return FALSE;
301 case IDABORT:
302 raise(SIGABRT);
303 _exit(3);
304 return FALSE; // Unreachable
305 }
306 }
307
308 return FALSE;
309}
void _exit(int exitcode)
Definition: _exit.c:25
int __cdecl raise(int _SigNum)
Definition: signal.c:71
#define SIGABRT
Definition: signal.h:28
#define _CRTDBG_MODE_DEBUG
Definition: crtdbg.h:25
#define _CRTDBG_MODE_WNDW
Definition: crtdbg.h:26
#define _CRTDBG_MODE_FILE
Definition: crtdbg.h:24
static _HFILE _CrtReportFiles[_CRT_ERRCNT]
Definition: dbgrpt.cpp:44
static int _CrtDbgReportWindow(int reportType, const char_t *filename, int linenumber, const char_t *moduleName, const char_t *message)
Definition: dbgrpt.cpp:157
static int _CrtModeOutputFormat[_CRT_ERRCNT]
Definition: dbgrpt.cpp:30
#define IDIGNORE
Definition: winuser.h:834

Referenced by _VCrtDbgReportA(), and _VCrtDbgReportW().

◆ _CrtLeaveDbgReport()

static void _CrtLeaveDbgReport ( int  reportType)
static

Definition at line 228 of file dbgrpt.cpp.

229{
230 if (reportType == _CRT_ASSERT)
232}

Referenced by _VCrtDbgReportA(), and _VCrtDbgReportW().

◆ _CrtSetReportFile()

EXTERN_C _HFILE __cdecl _CrtSetReportFile ( int  reportType,
_HFILE  reportFile 
)

Definition at line 247 of file dbgrpt.cpp.

248{
249 if (reportType >= _CRT_ERRCNT || reportType < 0)
250 return NULL;
251
252 _HFILE oldReportFile = _CrtReportFiles[reportType];
253 if (reportFile != _CRTDBG_REPORT_FILE)
254 _CrtReportFiles[reportType] = reportFile;
255 return oldReportFile;
256}
#define _CRTDBG_REPORT_FILE
Definition: crtdbg.h:33

◆ _CrtSetReportMode()

EXTERN_C int __cdecl _CrtSetReportMode ( int  reportType,
int  reportMode 
)

Definition at line 235 of file dbgrpt.cpp.

236{
237 if (reportType >= _CRT_ERRCNT || reportType < 0)
238 return 0;
239
240 int oldReportMode = _CrtModeOutputFormat[reportType];
241 if (reportMode != _CRTDBG_REPORT_MODE)
242 _CrtModeOutputFormat[reportType] = reportMode;
243 return oldReportMode;
244}
#define _CRTDBG_REPORT_MODE
Definition: crtdbg.h:27

◆ _VCrtDbgReportA()

EXTERN_C int __cdecl _VCrtDbgReportA ( int  reportType,
const char filename,
int  linenumber,
const char moduleName,
const char format,
va_list  arglist 
)

Definition at line 314 of file dbgrpt.cpp.

321{
322 char szFormatted[DBGRPT_MAX_BUFFER_SIZE] = {0}; // The user provided message
323 char szCompleteMessage[DBGRPT_MAX_BUFFER_SIZE] = {0}; // The output for debug / file
324
325 // Check for recursive _CrtDbgReport calls, and validate reportType
326 if (!_CrtEnterDbgReport(reportType, filename, linenumber))
327 return -1;
328
329 if (filename)
330 {
331 _snprintf(szCompleteMessage,
332 _countof(szCompleteMessage) - 1,
333 "%s(%d) : ",
334 filename,
335 linenumber);
336 }
337
338 if (format)
339 {
340 int len = _vsnprintf(szFormatted,
342 format,
343 arglist);
344 if (len < 0)
345 {
346 strcpy(szFormatted, DBGRPT_STRING_TOO_LONG);
347 }
348
349 if (reportType == _CRT_ASSERT)
350 strcat(szCompleteMessage, DBGRPT_ASSERT_PREFIX_MESSAGE);
351 strcat(szCompleteMessage, szFormatted);
352 }
353 else if (reportType == _CRT_ASSERT)
354 {
355 strcat(szCompleteMessage, DBGRPT_ASSERT_PREFIX_NOMESSAGE);
356 }
357
358 if (reportType == _CRT_ASSERT)
359 {
360 if (_CrtModeOutputFormat[reportType] & _CRTDBG_MODE_FILE)
361 strcat(szCompleteMessage, "\r");
362 strcat(szCompleteMessage, "\n");
363 }
364
365 // FIXME: Handle user report hooks here
366
367 int nResult = _CrtHandleDbgReport(reportType, szCompleteMessage, szFormatted, filename, linenumber, moduleName);
368
369 _CrtLeaveDbgReport(reportType);
370
371 return nResult;
372}
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
static void _CrtLeaveDbgReport(int reportType)
Definition: dbgrpt.cpp:228
static int _CrtHandleDbgReport(int reportType, const char_t *szCompleteMessage, const char_t *szFormatted, const char_t *filename, int linenumber, const char_t *moduleName)
Definition: dbgrpt.cpp:276
#define DBGRPT_STRING_TOO_LONG
Definition: dbgrpt.cpp:25
static int _CrtEnterDbgReport(int reportType, const char_t *filename, int linenumber)
Definition: dbgrpt.cpp:197
#define DBGRPT_ASSERT_PREFIX_MESSAGE
Definition: dbgrpt.cpp:23
#define DBGRPT_ASSERT_PREFIX_NOMESSAGE
Definition: dbgrpt.cpp:24
GLenum GLsizei len
Definition: glext.h:6722
#define _vsnprintf
Definition: xmlstorage.h:202
#define _snprintf
Definition: xmlstorage.h:200

Referenced by _CrtDbgReport(), and _CrtDbgReportV().

◆ _VCrtDbgReportW()

EXTERN_C int __cdecl _VCrtDbgReportW ( int  reportType,
const wchar_t filename,
int  linenumber,
const wchar_t moduleName,
const wchar_t format,
va_list  arglist 
)

Definition at line 376 of file dbgrpt.cpp.

383{
384 wchar_t szFormatted[DBGRPT_MAX_BUFFER_SIZE] = {0}; // The user provided message
385 wchar_t szCompleteMessage[DBGRPT_MAX_BUFFER_SIZE] = {0}; // The output for debug / file
386
387 // Check for recursive _CrtDbgReportW calls, and validate reportType
388 if (!_CrtEnterDbgReport(reportType, filename, linenumber))
389 return -1;
390
391 if (filename)
392 {
393 _snwprintf(szCompleteMessage,
394 _countof(szCompleteMessage) - 1,
395 L"%s(%d) : ",
396 filename,
397 linenumber);
398 }
399
400 if (format)
401 {
402 int len = _vsnwprintf(szFormatted,
404 format,
405 arglist);
406 if (len < 0)
407 {
409 }
410
411 if (reportType == _CRT_ASSERT)
412 wcscat(szCompleteMessage, _CRT_WIDE(DBGRPT_ASSERT_PREFIX_MESSAGE));
413 wcscat(szCompleteMessage, szFormatted);
414 }
415 else if (reportType == _CRT_ASSERT)
416 {
418 }
419
420 if (reportType == _CRT_ASSERT)
421 {
422 if (_CrtModeOutputFormat[reportType] & _CRTDBG_MODE_FILE)
423 wcscat(szCompleteMessage, L"\r");
424 wcscat(szCompleteMessage, L"\n");
425 }
426
427 // FIXME: Handle user report hooks here
428
429 int nResult = _CrtHandleDbgReport(reportType, szCompleteMessage, szFormatted, filename, linenumber, moduleName);
430
431 _CrtLeaveDbgReport(reportType);
432
433 return nResult;
434}
#define _CRT_WIDE(_String)
Definition: crtdefs.h:55
_CRTIMP int __cdecl _vsnwprintf(wchar_t *_Dest, size_t _Count, const wchar_t *_Format, va_list _Args)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)

Referenced by _CrtDbgReportW(), and _CrtDbgReportWV().

Variable Documentation

◆ _CrtInAssert

long _CrtInAssert = -1
static

Definition at line 28 of file dbgrpt.cpp.

Referenced by _CrtEnterDbgReport(), and _CrtLeaveDbgReport().

◆ _CrtMessageBoxW

tMessageBoxW _CrtMessageBoxW = NULL
static

Definition at line 54 of file dbgrpt.cpp.

Referenced by _CrtGetMessageBox().

◆ _CrtModeMessages

const wchar_t* _CrtModeMessages[_CRT_ERRCNT]
static
Initial value:
=
{
L"Warning",
L"Error",
L"Assertion Failed"
}

Definition at line 37 of file dbgrpt.cpp.

Referenced by _CrtDbgReportWindow().

◆ _CrtModeOutputFormat

int _CrtModeOutputFormat[_CRT_ERRCNT]
static

◆ _CrtReportFiles

_HFILE _CrtReportFiles[_CRT_ERRCNT]
static
Initial value:

Definition at line 44 of file dbgrpt.cpp.

Referenced by _CrtHandleDbgReport(), and _CrtSetReportFile().

◆ _CrtUser32Handle

HMODULE _CrtUser32Handle = NULL
static

Definition at line 53 of file dbgrpt.cpp.

Referenced by _CrtGetUser32().