|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
dbgtrack.h
Abstract:
Implements macros and declares functions for resource tracking apis. Split from old debug.h
Author:
Marc R. Whitten (marcw) 09-Sep-1999
Revision History:
--*/
#ifndef RC_INVOKED
#pragma once
#ifdef _cplusplus
extern "C" { #endif
//
// If either DBG or DEBUG defined, use debug mode
//
#ifdef DBG
#ifndef DEBUG
#define DEBUG
#endif
#endif
#ifdef DEBUG
#ifndef DBG
#define DBG
#endif
#endif
//
// Includes
//
// None
//
// Strings
//
// None
//
// Constants
//
//
// Debug-only constants
//
#ifdef DEBUG
// This option makes fat, slow binaries
#define MEMORY_TRACKING
#define ALLOCATION_TRACKING_DEF , PCSTR File, UINT Line
#define ALLOCATION_TRACKING_CALL ,__FILE__,__LINE__
#define ALLOCATION_TRACKING_INLINE_CALL ,File,Line
#endif
//
// Macros
//
#ifdef DEBUG
#define DISABLETRACKCOMMENT() DisableTrackComment()
#define ENABLETRACKCOMMENT() EnableTrackComment()
#define TRACK_BEGIN(type,name) Track##type(TrackPush(#name,__FILE__,__LINE__) ? (type) 0 : (
#define TRACK_END() ))
#define INVALID_POINTER(x) x=NULL
#else
#define DISABLETRACKCOMMENT()
#define ENABLETRACKCOMMENT()
#define TRACK_BEGIN(type,name)
#define TRACK_END()
#define INVALID_POINTER(x)
#define ALLOCATION_TRACKING_DEF
#define ALLOCATION_TRACKING_CALL
#define ALLOCATION_TRACKING_INLINE_CALL
#define InitAllocationTracking()
#define FreeAllocationTracking()
#define DebugRegisterAllocationEx(t,p,f,l,a)
#define DebugRegisterAllocation(t,p,f,l)
#define DebugUnregisterAllocation(t,p)
#endif
//
// Types
//
typedef enum { MERGE_OBJECT, POOLMEM_POINTER, POOLMEM_POOL, INF_HANDLE } ALLOCTYPE;
//
// Globals
//
extern PCSTR g_TrackComment; extern INT g_UseCount; extern PCSTR g_TrackFile; extern UINT g_TrackLine; extern BOOL g_TrackAlloc;
//
// Macro expansion list
//
#define TRACK_WRAPPERS \
DEFMAC(PBYTE) \ DEFMAC(DWORD) \ DEFMAC(BOOL) \ DEFMAC(UINT) \ DEFMAC(PCSTR) \ DEFMAC(PCWSTR) \ DEFMAC(PVOID) \ DEFMAC(PSTR) \ DEFMAC(PWSTR) \ DEFMAC(HINF) \ DEFMAC(PMHANDLE) \ DEFMAC(PGROWBUFFER) \ DEFMAC(PPARSEDPATTERNA) \ DEFMAC(PPARSEDPATTERNW) \ DEFMAC(POBSPARSEDPATTERNA) \ DEFMAC(POBSPARSEDPATTERNW) \ DEFMAC(HASHTABLE) \
//
// Public function prototypes
//
#ifdef DEBUG
VOID InitAllocationTracking (VOID); VOID FreeAllocationTracking (VOID); VOID DebugRegisterAllocationEx (ALLOCTYPE Type, PVOID Ptr, PCSTR File, UINT Line, BOOL Alloc); VOID DebugRegisterAllocation (ALLOCTYPE Type, PVOID Ptr, PCSTR File, UINT Line); VOID DebugUnregisterAllocation (ALLOCTYPE Type, PVOID Ptr); VOID DisableTrackComment (VOID); VOID EnableTrackComment (VOID);
INT TrackPush (PCSTR Name, PCSTR File, UINT Line); INT TrackPushEx (PCSTR Name, PCSTR File, UINT Line, BOOL Alloc); INT TrackPop (VOID);
VOID TrackDump ( VOID );
#define TRACKPUSH(n,f,l) TrackPush(n,f,l)
#define TRACKPUSHEX(n,f,l,a) TrackPushEx(n,f,l,a)
#define TRACKPOP() TrackPop()
#define TRACKDUMP() TrackDump()
//
// Macro expansion definition
//
#define DEFMAC(type) __inline type Track##type (type Arg) {TrackPop(); return Arg;}
TRACK_WRAPPERS
#undef DEFMAC
#else // i.e., if !DEBUG
#define TRACKPUSH(n,f,l)
#define TRACKPUSHEX(n,f,l,a)
#define TRACKPOP()
#define TRACKDUMP()
#endif
#ifdef _cplusplus
} #endif
#endif
|