181 lines
6.1 KiB
C
181 lines
6.1 KiB
C
//+----------------------------------------------------------------------------
|
|
//
|
|
// File: cmdebug.h
|
|
//
|
|
// Module: CMDEBUG.LIB
|
|
//
|
|
// Synopsis: Header file for Internal CM Debugging functions.
|
|
//
|
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
|
//
|
|
// Author: quintinb Created Header 08/19/99
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
#ifndef CMDEBUG_H
|
|
#define CMDEBUG_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// Macros for debugging support.
|
|
//
|
|
// MYDBGASSERT(x): If (!x) Assert MessageBox which has three option:
|
|
// Abort to end the application,
|
|
// Ignore to continue,
|
|
// Retry to debug
|
|
//
|
|
// CMASSERTMSG(exp, msg) Similar to MYDBGASSERT. Except the msg is displayed instead of expression
|
|
//
|
|
// Use CMTRACE(x) for output, where x is a list of printf()-style parameters.
|
|
// CMTRACEn() is TRACE with n printf arguments
|
|
// For example, CMTRACE2(("This shows how to print stuff, like a string %s, and a number %u.","string",5));
|
|
//
|
|
// MYDBG is obsolete and equivalent to CMTRACE
|
|
//
|
|
// Use MYDBGTST(y,x) to output x if y is TRUE. For example,
|
|
// MYDBGTST(1,("This always prints"));
|
|
//
|
|
// Use MYDBGSTR(x) for safe-printing of string pointers. For example,
|
|
// MYDBG(("This would normally, fault - %s.",MYDBGSTR(NULL)));
|
|
//
|
|
// USE MYVERIFY for expressions executed for both debug and release version
|
|
|
|
#ifdef DEBUG
|
|
|
|
void MyDbgPrintfA(const char *pszFmt, ...);
|
|
void MyDbgPrintfW(const WCHAR *pszFmt, ...);
|
|
void MyDbgAssertA(const char *pszFile, unsigned nLine, const char *pszMsg);
|
|
void MyDbgAssertW(const char *pszFile, unsigned nLine, WCHAR *pszMsg);
|
|
void InvertPercentSAndPercentC(LPSTR pszFormat);
|
|
int WINAPI wvsprintfWtoAWrapper(OUT LPSTR pszAnsiOut, IN LPCWSTR pszwFmt, IN va_list arglist);
|
|
|
|
#define MYDBGASSERTA(x) (void)((x) || (MyDbgAssertA(__FILE__,__LINE__,#x),0))
|
|
#define MYDBGASSERTW(x) (void)((x) || (MyDbgAssertW(__FILE__,__LINE__,L#x),0))
|
|
|
|
#define MYVERIFYA(x) MYDBGASSERTA(x)
|
|
#define MYVERIFYW(x) MYDBGASSERTW(x)
|
|
|
|
#define MYDBGTSTA(y,x) if (y) MyDbgPrintfA x
|
|
#define MYDBGTSTW(y,x) if (y) MyDbgPrintfW x
|
|
|
|
|
|
// {MYDBGASSERT(pObj);pObj->AssertValid();}
|
|
#define ASSERT_VALID(pObj) ((MYDBGASSERT(pObj),1) && ((pObj)->AssertValid(),1))
|
|
|
|
#define MYDBGA(x) MyDbgPrintfA x
|
|
#define MYDBGW(x) MyDbgPrintfW x
|
|
|
|
#define MYDBGSTRA(x) ((x)?(x):"(null)")
|
|
#define MYDBGSTRW(x) ((x)?(x):L"(null)")
|
|
|
|
#define CMASSERTMSGA(exp, msg) (void)((exp) || (MyDbgAssertA(__FILE__,__LINE__,msg),0))
|
|
#define CMASSERTMSGW(exp, msg) (void)((exp) || (MyDbgAssertW(__FILE__,__LINE__,msg),0))
|
|
|
|
#define CMTRACEA(pszFmt) MyDbgPrintfA(pszFmt)
|
|
#define CMTRACEW(pszFmt) MyDbgPrintfW(pszFmt)
|
|
|
|
#define CMTRACEHRA(pszFile, hr) if (hr) MyDbgPrintfA("%s: returns error %x", pszFile, (hr));
|
|
#define CMTRACEHRW(pszFile, hr) if (hr) MyDbgPrintfW(L"%s: returns error %x", pszFile, (hr));
|
|
|
|
#define CMTRACE1A(pszFmt, arg1) MyDbgPrintfA(pszFmt, arg1)
|
|
#define CMTRACE1W(pszFmt, arg1) MyDbgPrintfW(pszFmt, arg1)
|
|
|
|
#define CMTRACE2A(pszFmt, arg1, arg2) MyDbgPrintfA(pszFmt, arg1, arg2)
|
|
#define CMTRACE2W(pszFmt, arg1, arg2) MyDbgPrintfW(pszFmt, arg1, arg2)
|
|
|
|
#define CMTRACE3A(pszFmt, arg1, arg2, arg3) MyDbgPrintfA(pszFmt, arg1, arg2, arg3)
|
|
#define CMTRACE3W(pszFmt, arg1, arg2, arg3) MyDbgPrintfW(pszFmt, arg1, arg2, arg3)
|
|
|
|
#ifdef UNICODE
|
|
#define MyDbgPrintf MyDbgPrintfW
|
|
#define MyDbgAssert MyDbgAssertW
|
|
#define MYDBGTST(y,x) MYDBGTSTW(y,x)
|
|
#define MYDBG(x) MYDBGW(x)
|
|
#define MYDBGSTR(x) MYDBGSTRW(x)
|
|
#define CMASSERTMSG(exp, msg) CMASSERTMSGW(exp, msg)
|
|
#define CMTRACE(pszFmt) CMTRACEW(pszFmt)
|
|
#define CMTRACEHR(pszFile, hr) CMTRACEHRW(pszFile, hr)
|
|
#define CMTRACE1(pszFmt, arg1) CMTRACE1W(pszFmt, arg1)
|
|
#define CMTRACE2(pszFmt, arg1, arg2) CMTRACE2W(pszFmt, arg1, arg2)
|
|
#define CMTRACE3(pszFmt, arg1, arg2, arg3) CMTRACE3W(pszFmt, arg1, arg2, arg3)
|
|
#define MYDBGASSERT MYDBGASSERTW
|
|
#define MYVERIFY MYVERIFYW
|
|
#else
|
|
#define MyDbgPrintf MyDbgPrintfA
|
|
#define MyDbgAssert MyDbgAssertA
|
|
#define MYDBGTST(y,x) MYDBGTSTA(y,x)
|
|
#define MYDBG(x) MYDBGA(x)
|
|
#define MYDBGSTR(x) MYDBGSTRA(x)
|
|
#define CMASSERTMSG(exp, msg) CMASSERTMSGA(exp, msg)
|
|
#define CMTRACE(pszFmt) CMTRACEA(pszFmt)
|
|
#define CMTRACEHR(pszFile, hr) CMTRACEHRA(pszFile, hr)
|
|
#define CMTRACE1(pszFmt, arg1) CMTRACE1A(pszFmt, arg1)
|
|
#define CMTRACE2(pszFmt, arg1, arg2) CMTRACE2A(pszFmt, arg1, arg2)
|
|
#define CMTRACE3(pszFmt, arg1, arg2, arg3) CMTRACE3A(pszFmt, arg1, arg2, arg3)
|
|
#define MYDBGASSERT MYDBGASSERTA
|
|
#define MYVERIFY MYVERIFYA
|
|
#endif
|
|
|
|
#else // DEBUG
|
|
|
|
#define ASSERT_VALID(pObj)
|
|
|
|
#define MYDBG(x)
|
|
#define MYDBGTST(y,x)
|
|
#define MYDBGSTR(x)
|
|
#define MYDBGASSERT(x)
|
|
|
|
#define CMASSERTMSG(exp, msg)
|
|
#define MYVERIFY(x) (x)
|
|
#define CMTRACE(pszFmt)
|
|
#define CMTRACEHR(pszFile, hr)
|
|
#define CMTRACE1(pszFmt, arg1)
|
|
#define CMTRACE2(pszFmt, arg1, arg2)
|
|
#define CMTRACE3(pszFmt, arg1, arg2, arg3)
|
|
|
|
#define MYDBGASSERTA(x)
|
|
#define MYDBGASSERTW(x)
|
|
|
|
#define MYVERIFYA(x)
|
|
#define MYVERIFYW(x)
|
|
|
|
#define MYDBGTSTA(y,x)
|
|
#define MYDBGTSTW(y,x)
|
|
|
|
#define ASSERT_VALID(pObj)
|
|
|
|
#define MYDBGA(x)
|
|
#define MYDBGW(x)
|
|
|
|
#define MYDBGSTRA(x)
|
|
#define MYDBGSTRW(x)
|
|
|
|
#define CMASSERTMSGA(exp, msg)
|
|
#define CMASSERTMSGW(exp, msg)
|
|
|
|
#define CMTRACEA(pszFmt)
|
|
#define CMTRACEW(pszFmt)
|
|
|
|
#define CMTRACEHRA(pszFile, hr)
|
|
#define CMTRACEHRW(pszFile, hr)
|
|
|
|
#define CMTRACE1A(pszFmt, arg1)
|
|
#define CMTRACE1W(pszFmt, arg1)
|
|
|
|
#define CMTRACE2A(pszFmt, arg1, arg2)
|
|
#define CMTRACE2W(pszFmt, arg1, arg2)
|
|
|
|
#define CMTRACE3A(pszFmt, arg1, arg2, arg3)
|
|
#define CMTRACE3W(pszFmt, arg1, arg2, arg3)
|
|
|
|
#endif // DEBUG
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|