windows-nt/Source/XPSP1/NT/net/rras/cm/common/inc/cmdebug.h
2020-09-26 16:20:57 +08:00

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