windows-nt/Source/XPSP1/NT/drivers/wdm/input/client/hidtest/debug.h
2020-09-26 16:20:57 +08:00

162 lines
3.5 KiB
C

#ifndef __DEBUG_H__
#define __DEBUG_H__
#ifdef DEBUG
#ifndef _DEBUG
#define _DEBUG
#endif
#endif
#ifdef _DEBUG
/*
// Put in include files to insure that necessary files have been included
// to get all function prototypes and structure defined before use
*/
#include <windows.h>
/*
// Need a macro to output messages to the debugger
*/
#define DEBUG_OUT(str) OutputDebugString(str)
/*
// Define our trapping related debugging stuff
// Define 4 levels of trap to allow us to break only in certain
// conditions
*/
#define TRAP_LEVEL_1 1
#define TRAP_LEVEL_2 2
#define TRAP_LEVEL_3 3
#define TRAP_LEVEL_4 4
#ifndef __DEBUG_C__
extern INT Debug_TrapLevel;
extern BOOL Debug_TrapOn;
#endif
#define TRAP_ON() Debug_TrapOn = TRUE
#define TRAP_OFF() Debug_TrapOn = FALSE
#define GET_TRAP_STATE() Debug_TrapOn
#define SET_TRAP_LEVEL(lvl) Debug_TrapLevel = lvl
/*
// Define the trap macro which will break only when the trap levels
// are matching and also displays an optional message
*/
#undef TRAP
#define TRAP(lvl, msg) \
{ \
if (Debug_TrapOn && ((lvl) >= Debug_TrapLevel)) { \
if (NULL != (msg)) \
DEBUG_OUT((msg)); \
\
DebugBreak(); \
} \
}
/*
// Define the ASSERT macro to test the string. Current it will trap
// whenever is on and the expression fails
*/
#undef ASSERT
#define ASSERT(exp) \
{ \
if ((!(exp))) { \
static CHAR TempStr[1024]; \
\
wsprintf(TempStr, \
"Assertion Failed: %s, file: %s, line %s", \
#exp, __FILE__, __LINE__); \
\
DEBUG_OUT(TempStr); \
TRAP(TRAP_LEVEL_1, NULL); \
} \
}
/*
// Memory allocation routines
*/
/*
// Function definitions
*/
HGLOBAL __cdecl
Debug_Alloc(
IN PCHAR FileName,
IN ULONG LineNumber,
IN DWORD AllocSize
);
HGLOBAL __cdecl
Debug_Realloc(
IN PCHAR FileName,
IN ULONG LineNumber,
IN PVOID MemoryBlock,
IN DWORD AllocSize
);
HGLOBAL __cdecl
Debug_Free(
IN PVOID Buffer
);
BOOL __cdecl
Debug_ValidateMemoryAlloc(
IN PVOID Header,
OUT PVOID AllocStatus
);
VOID __cdecl
Debug_CheckForMemoryLeaks();
/*
// Wrapper macros
*/
#define ALLOC(siz) Debug_Alloc(__FILE__, __LINE__, siz)
#define REALLOC(blk, siz) Debug_Realloc(__FILE__, __LINE__, blk, siz)
#define FREE(ptr) Debug_Free(ptr)
#define VALIDATEMEM(ptr) Debug_ValidateMemoryAlloc(ptr, NULL)
#define CHECKFORLEAKS() Debug_CheckForMemoryLeaks()
#else
/*
// Non-debug versions of the above routines
*/
#define DEBUG_OUT(str)
#define TRAP_ON()
#define TRAP_OFF()
#define GET_TRAP_STATE()
#define SET_TRAP_LEVEL(lvl)
#undef TRAP
#define TRAP(lvl, msg)
#undef ASSERT
#define ASSERT(exp)
#define ALLOC(siz) GlobalAlloc(GPTR, siz)
#define REALLOC(blk, siz) GlobalReAlloc(blk, siz, GMEM_ZEROINIT)
#define FREE(ptr) GlobalFree(ptr)
#define VALIDATEMEM(ptr) TRUE
#define CHECKFORLEAKS()
#endif
#endif