windows-nt/Source/XPSP1/NT/windows/winstate/cobra/utils/inc/dbgtrack.h
2020-09-26 16:20:57 +08:00

223 lines
3.7 KiB
C

/*++
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