|
|
/*++
Copyright (c) 1998-1999 Microsoft Corporation All rights reserved.
Module Name:
dbgmsg.hxx
Abstract:
Debug Library
Author:
Steve Kiraly (SteveKi) 5-Dec-1995
Revision History:
--*/ #ifndef _DBGMSG_HXX_
#define _DBGMSG_HXX_
enum EDebugType { //
// Currently supported debug output device types.
//
kDbgNull = 0x00000001, // Log messages to null device (nothing)
kDbgDebugger = 0x00000002, // Log messgaes to debugger
kDbgFile = 0x00000004, // Log messages to file
kDbgConsole = 0x00000008, // Log messages to text console only for gui apps
kDbgBackTrace = 0x00000010, // Log stack back traces at each message call
kDbgMemory = 0x00000020, // Log messages to memory block
kDbgSerialTerminal = 0x00000040, // Log messages to serial terminal
};
enum EDebugLevel { //
// Private internal defined flags. (do not use in your code)
//
kDbgPrivateMask = 0x0000000F, // Private flag mask
kDbgAnsi = 0x00000000, // Output device will accept ansi characters
kDbgUnicode = 0x00000001, // Output device will accept unicode characters
kDbgAlways = 0x00000002, // Always display ignore levels used for assert messages
kDbgNoPrefix = 0x00000004, // Do not display the prefix string
kDbgNoFileInfo = 0x00000008, // Do not display the file information
//
// Display output customization flags.
//
kDbgDisplayMask = 0x00000FF0, // User defined flag mask
kDbgFileInfo = 0x00000010, // Show file name and line number
kDbgFileInfoLong = 0x00000020, // Show file name in long format, full path
kDbgTimeStamp = 0x00000040, // Show time stamp
kDbgTimeStampLong = 0x00000080, // Show time stamp long format hh:mm:ss tt
kDbgThreadId = 0x00000100, // Show thread id
//
// User defined levels.
//
kDbgUserLevelMask = 0xFFFFF000, // User defined level mask
kDbgNone = 0x00001000, // No message
kDbgTrace = 0x00002000, // Trace messages
kDbgWarning = 0x00004000, // Warning messages
kDbgError = 0x00008000, // Error messages
kDbgFatal = 0x00010000, // Fatal messages
kDbgPerformance = 0x00020000, // Show performance counter results
kDbgCsrCacheManager = 0x00040000, // Debug CSR cache manager
kDbgCsrMonitor = 0x00080000, // Debug CSR port monitor
kDbgCsrCore = 0x00100000, // Debug CSR port monitor
kDbgCsrConnect = 0x00200000, // Debug CSR connection manager
};
enum EDebugCompileType { #ifdef UNICODE
kDbgCompileType = kDbgUnicode, #else
kDbgCompileType = kDbgAnsi, #endif
};
/********************************************************************
Debug message macros.
********************************************************************/ #if DBG
#define DBG_NULL kDbgNull
#define DBG_CONSOLE kDbgConsole
#define DBG_DEBUGGER kDbgDebugger
#define DBG_FILE kDbgFile
#define DBG_BACKTRACE kDbgBackTrace
#define DBG_DEFAULT kDbgDebugger
#define DBG_FILEINFO kDbgFileInfo
#define DBG_FILEINFO_LONG kDbgFileInfoLong
#define DBG_TIMESTAMP kDbgTimeStamp
#define DBG_TIMESTAMP_LONG kDbgTimeStampLong
#define DBG_THREADID kDbgThreadId
#define DBG_NONE kDbgNone
#define DBG_INFO kDbgInfo
#define DBG_TRACE kDbgTrace
#define DBG_WARN kDbgWarning
#define DBG_ERROR kDbgError
#define DBG_FATAL kDbgFatal
#define DBG_PERF kDbgPerformance
#define DBG_CACHE kDbgCsrCacheManager
#define DBG_MONITOR kDbgCsrMonitor
#define DBG_CORE kDbgCsrCore
#define DBG_CONNECT kDbgCsrConnect
#ifndef DBG_MODULE_PREFIX
#define DBG_MODULE_PREFIX NULL
#endif
#define DBG_STR( str ) \
((str) ? (str) : _T("(NULL)"))
#define DBG_RAW(Message) \
OutputDebugString(Message _T("\r\n"))
#define DBG_COMMENT(Comment) \
Comment
#define DBG_BREAK() \
DebugBreak()
#define DBG_OPEN(Prefix, uDevice, Level, Break) \
TDebugMsg_Register((Prefix), (uDevice), (Level), (Break))
#define DBG_CLOSE() \
TDebugMsg_Release()
#define DBG_ENABLE() \
TDebugMsg_Enable()
#define DBG_DISABLE() \
TDebugMsg_Disable()
#define DBG_ATTACH(uDevice, pszConfiguration) \
TDebugMsg_Attach(NULL, (uDevice), (pszConfiguration))
#define DBG_HANDLE_(hDevice) \
HANDLE hDevice = NULL
#define DBG_ATTACH_(hDevice, uDevice, pszConfiguration) \
TDebugMsg_Attach(&(hDevice), (uDevice), (pszConfiguration))
#define DBG_DETACH_(hDevice) \
TDebugMsg_Detach(&(hDevice))
#define DBG_SET_FIELD_FORMAT(Level, Format) \
TDebugMsg_SetMessageFieldFormat((Level), (Format))
#ifdef __cplusplus
//
// For C++ files function overloading is used to call either the ansi or unicode versions.
//
#define DBG_MSG(uLevel, Msg) \
TDebugMsg_Msg((uLevel), _T(__FILE__), __LINE__, DBG_MODULE_PREFIX, TDebugMsg_Fmt Msg)
#else // not __cplusplus
//
// For C files the compiled character type determines which function to call.
//
#define DBG_MSGW(uLevel, Msg) \
TDebugMsg_MsgW((uLevel), _T(__FILE__), __LINE__, DBG_MODULE_PREFIX, TDebugMsg_FmtW Msg)
#define DBG_MSGA(uLevel, Msg) \
TDebugMsg_MsgA((uLevel), _T(__FILE__), __LINE__, DBG_MODULE_PREFIX, TDebugMsg_FmtA Msg)
#ifdef UNICODE
#define DBG_MSG DBG_MSGW
#else
#define DBG_MSG DBG_MSGA
#endif // unicode
#endif // __cplusplus
//
// Debug assert normal assert.
//
#define DBG_ASSERT(Exp) \
do { if (!(Exp)) \ {\ DBG_MSG(kDbgAlways|kDbgFileInfo, (_T("Assert %s\n"), _T(#Exp)));\ DBG_BREAK(); \ } } while (0)
//
// Assert with addtional message.
//
#define DBG_ASSERT_MSG(Exp, Msg) \
do { if (!(Exp)) \ {\ DBG_MSG(kDbgAlways|kDbgFileInfo, (_T("Assert %s"), _T(#Exp))); \ DBG_MSG(kDbgAlways|kDbgNoPrefix, Msg); \ DBG_BREAK(); \ } } while (0)
#else // not DBG
#define DBG_FILEINFO 0
#define DBG_FILEINFO_LONG 0
#define DBG_TIMESTAMP 0
#define DBG_TIMESTAMP_LONG 0
#define DBG_TRHEADID 0
#define DBG_NONE 0
#define DBG_INFO 0
#define DBG_TRACE 0
#define DBG_WARN 0
#define DBG_ERROR 0
#define DBG_FATAL 0
#define DBG_PERF 0
#define DBG_CACHE 0
#define DBG_MONITOR 0
#define DBG_CORE 0
#define DBG_CONNECT 0
#define DBG_RAW(Message) // Empty
#define DBG_COMMENT(Comment) // Empty
#define DBG_BREAK() // Empty
#define DBG_OPEN(Prefix, uDevice, Level, Break) // Empty
#define DBG_CLOSE() // Empty
#define DBG_MSG(uLevel, Message) // Empty
#define DBG_MSGA(uLevel, Message) // Empty
#define DBG_MSGW(uLevel, Message) // Empty
#define DBG_ASSERT(Exp) // Empty
#define DBG_ASSERT_MSG(Exp, Message) // Empty
#define DBG_ATTACH(uDevice, pszConfiguration) // Empty
#define DBG_HANDLE_(Handle) // Empty
#define DBG_ATTACH_(hDevice, uDevice, pszConfiguration) // Empty
#define DBG_DETACH_(Handle) // Empty
#define DBG_ENABLE() // Empty
#define DBG_DISABLE() // Empty
#define DBG_SET_FIELD_FORMAT(Level, Format) // Empty
#endif
/********************************************************************
Debug message functions exported by this library.
********************************************************************/
#ifdef __cplusplus
extern "C" { #endif
BOOL TDebugMsg_Register( IN LPCTSTR pszPrefix, IN UINT uDevice, IN INT eLevel, IN INT eBreak );
VOID TDebugMsg_Release( VOID );
VOID TDebugMsg_Enable( VOID );
VOID TDebugMsg_Disable( VOID );
BOOL TDebugMsg_Attach( IN HANDLE *phDevice, IN UINT uDevice, IN LPCTSTR pszConfiguration );
VOID TDebugMsg_Detach( IN HANDLE *phDevice );
VOID TDebugMsg_MsgA( IN UINT eLevel, IN LPCTSTR pszFile, IN UINT uLine, IN LPCTSTR pszModulePrefix, IN LPSTR pszMessage );
VOID TDebugMsg_MsgW( IN UINT eLevel, IN LPCTSTR pszFile, IN UINT uLine, IN LPCTSTR pszModulePrefix, IN LPWSTR pszMessage );
LPSTR WINAPIV TDebugMsg_FmtA( IN LPCSTR pszFmt, IN ... );
LPWSTR WINAPIV TDebugMsg_FmtW( IN LPCWSTR pszFmt, IN ... );
VOID TDebugMsg_SetMessageFieldFormat( IN UINT eLevel, IN LPTSTR pszFormat );
#ifdef __cplusplus
} #endif
#ifdef __cplusplus
VOID TDebugMsg_Msg( IN UINT eLevel, IN LPCTSTR pszFile, IN UINT uLine, IN LPCTSTR pszModulePrefix, IN LPSTR pszMessage );
VOID TDebugMsg_Msg( IN UINT eLevel, IN LPCTSTR pszFile, IN UINT uLine, IN LPCTSTR pszModulePrefix, IN LPWSTR pszMessage );
LPSTR WINAPIV TDebugMsg_Fmt( IN LPCSTR pszFmt, IN ... );
LPWSTR WINAPIV TDebugMsg_Fmt( IN LPCWSTR pszFmt, IN ... );
#endif // __cplusplus
#endif // DBGMSG_HXX
|