You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
4.3 KiB
170 lines
4.3 KiB
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//
|
|
// Copyright 1996 - 2003 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// FILE: Debug.H
|
|
//
|
|
//
|
|
// PURPOSE: Define common data types, and external function prototypes
|
|
// for debugging functions.
|
|
//
|
|
// PLATFORMS:
|
|
//
|
|
// Windows 2000, Windows XP, Windows Server 2003
|
|
//
|
|
//
|
|
#ifndef _DEBUG_H
|
|
#define _DEBUG_H
|
|
|
|
|
|
|
|
// VC and Build use different debug defines.
|
|
// The following makes it so either will
|
|
// cause the inclusion of debugging code.
|
|
#if !defined(_DEBUG) && defined(DBG)
|
|
#define _DEBUG DBG
|
|
#elif defined(_DEBUG) && !defined(DBG)
|
|
#define DBG _DEBUG
|
|
#endif
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////
|
|
// Macros
|
|
/////////////////////////////////////////////////////////
|
|
|
|
//
|
|
// These macros are used for debugging purposes. They expand
|
|
// to white spaces on a free build. Here is a brief description
|
|
// of what they do and how they are used:
|
|
//
|
|
// giDebugLevel
|
|
// Global variable which set the current debug level to control
|
|
// the amount of debug messages emitted.
|
|
//
|
|
// VERBOSE(msg)
|
|
// Display a message if the current debug level is <= DBG_VERBOSE.
|
|
//
|
|
// TERSE(msg)
|
|
// Display a message if the current debug level is <= DBG_TERSE.
|
|
//
|
|
// WARNING(msg)
|
|
// Display a message if the current debug level is <= DBG_WARNING.
|
|
// The message format is: WRN filename (linenumber): message
|
|
//
|
|
// ERR(msg)
|
|
// Similiar to WARNING macro above - displays a message
|
|
// if the current debug level is <= DBG_ERROR.
|
|
//
|
|
// ASSERT(cond)
|
|
// Verify a condition is true. If not, force a breakpoint.
|
|
//
|
|
// ASSERTMSG(cond, msg)
|
|
// Verify a condition is true. If not, display a message and
|
|
// force a breakpoint.
|
|
//
|
|
// RIP(msg)
|
|
// Display a message and force a breakpoint.
|
|
//
|
|
// Usage:
|
|
// These macros require extra parantheses for the msg argument
|
|
// example, ASSERTMSG(x > 0, ("x is less than 0\n"));
|
|
// WARNING(("App passed NULL pointer, ignoring...\n"));
|
|
//
|
|
|
|
#define DBG_VERBOSE 1
|
|
#define DBG_TERSE 2
|
|
#define DBG_WARNING 3
|
|
#define DBG_ERROR 4
|
|
#define DBG_RIP 5
|
|
#define DBG_NONE 6
|
|
|
|
#if DBG
|
|
|
|
#define DebugMsg DebugMessage
|
|
|
|
//
|
|
// Strip the directory prefix from a filename (ANSI version)
|
|
//
|
|
|
|
PCSTR
|
|
StripDirPrefixA(
|
|
IN PCSTR pstrFilename
|
|
);
|
|
|
|
extern INT giDebugLevel;
|
|
|
|
|
|
#define DBGMSG(level, prefix, msg) { \
|
|
if (giDebugLevel <= (level)) { \
|
|
DebugMsg("%s %s (%d): ", prefix, StripDirPrefixA(__FILE__), __LINE__); \
|
|
DebugMsg(msg); \
|
|
} \
|
|
}
|
|
|
|
#define DBGPRINT(level, msg) { \
|
|
if (giDebugLevel <= (level)) { \
|
|
DebugMsg(msg); \
|
|
} \
|
|
}
|
|
|
|
#define VERBOSE if(giDebugLevel <= DBG_VERBOSE) DebugMsg
|
|
#define TERSE if(giDebugLevel <= DBG_TERSE) DebugMsg
|
|
#define WARNING if(giDebugLevel <= DBG_WARNING) DebugMsg
|
|
#define ERR if(giDebugLevel <= DBG_ERROR) DebugMsg
|
|
|
|
#define ASSERT(cond) { \
|
|
if (! (cond)) { \
|
|
RIP(("\n")); \
|
|
} \
|
|
}
|
|
|
|
#define ASSERTMSG(cond, msg) { \
|
|
if (! (cond)) { \
|
|
RIP(msg); \
|
|
} \
|
|
}
|
|
|
|
#define RIP(msg) { \
|
|
DBGMSG(DBG_RIP, "RIP", msg); \
|
|
DebugBreak(); \
|
|
}
|
|
|
|
|
|
#else // !DBG
|
|
|
|
#define DebugMsg NOP_FUNCTION
|
|
|
|
#define VERBOSE NOP_FUNCTION
|
|
#define TERSE NOP_FUNCTION
|
|
#define WARNING NOP_FUNCTION
|
|
#define ERR NOP_FUNCTION
|
|
|
|
#define ASSERT(cond)
|
|
|
|
#define ASSERTMSG(cond, msg)
|
|
#define RIP(msg)
|
|
#define DBGMSG(level, prefix, msg)
|
|
#define DBGPRINT(level, msg)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////
|
|
// ProtoTypes
|
|
/////////////////////////////////////////////////////////
|
|
|
|
BOOL DebugMessage(LPCSTR, ...);
|
|
BOOL DebugMessage(LPCWSTR, ...);
|
|
void Dump(PPUBLISHERINFO pPublisherInfo);
|
|
void Dump(POEMDMPARAM pOemDMParam);
|
|
|
|
|
|
#endif
|
|
|
|
|