|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
debug.h
Abstract:
Implements macros and declares functions for:
- Resource allocation tracking - Logging - Definition of DEBUG
Author:
Jim Schmidt (jimschm) 01-Jan-1997
Revision History:
Ovidiu Temereanca (ovidiut) 06-Nov-1998 Took out log related function declarations and put them in log.h file
--*/
#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
//
// Debug-only constants
//
#ifdef DEBUG
// This option makes fat, slow binaries
//#define MEMORY_TRACKING
#include <stdarg.h>
typedef enum { MERGE_OBJECT, POOLMEM_POINTER, POOLMEM_POOL, INF_HANDLE } ALLOCTYPE;
VOID InitAllocationTracking (VOID); VOID FreeAllocationTracking (VOID); VOID DebugRegisterAllocation (ALLOCTYPE Type, PVOID Ptr, PCSTR File, UINT Line); VOID DebugUnregisterAllocation (ALLOCTYPE Type, PVOID Ptr); #define ALLOCATION_TRACKING_DEF , PCSTR File, UINT Line
#define ALLOCATION_TRACKING_CALL ,__FILE__,__LINE__
#define ALLOCATION_INLINE_CALL , File, Line
extern PCSTR g_TrackComment; extern INT g_UseCount; extern PCSTR g_TrackFile; extern UINT g_TrackLine; DWORD SetTrackComment (PCSTR Msg, PCSTR File, UINT Line); DWORD ClrTrackComment (VOID); VOID DisableTrackComment (VOID); VOID EnableTrackComment (VOID); #define SETTRACKCOMMENT(RetType, Msg,File,Line) ((RetType)(SetTrackComment(Msg,File,Line) | (DWORD) (
#define CLRTRACKCOMMENT ) | ClrTrackComment()))
#define SETTRACKCOMMENT_VOID(Msg,File,Line) SetTrackComment(Msg,File,Line), (
#define CLRTRACKCOMMENT_VOID ), ClrTrackComment()
#define DISABLETRACKCOMMENT() DisableTrackComment()
#define ENABLETRACKCOMMENT() EnableTrackComment()
VOID InitLog (BOOL DeleteLog);
//
// Memory debug option
//
#define MemAlloc(heap,flags,size) DebugHeapAlloc(__FILE__,__LINE__,heap,flags,size)
#define MemReAlloc(heap,flags,ptr,size) DebugHeapReAlloc(__FILE__,__LINE__,heap,flags,ptr,size)
#define MemFree(heap,flags,ptr) DebugHeapFree(__FILE__,__LINE__,heap,flags,ptr)
#define MemCheck(heap) DebugHeapCheck(__FILE__,__LINE__,heap)
PVOID DebugHeapAlloc (PCSTR File, DWORD Line, HANDLE hHeap, DWORD dwFlags, DWORD dwSize); PVOID DebugHeapReAlloc (PCSTR File, DWORD Line, HANDLE hHeap, DWORD dwFlags, PCVOID pMem, DWORD dwSize); BOOL DebugHeapFree (PCSTR File, DWORD Line, HANDLE hHeap, DWORD dwFlags, PCVOID pMem); VOID DebugHeapCheck (PCSTR File, DWORD Line, HANDLE hHeap);
void DumpHeapStats ();
#else
//
// No-debug constants
//
#define SETTRACKCOMMENT(RetType,Msg,File,Line)
#define CLRTRACKCOMMENT
#define SETTRACKCOMMENT_VOID(Msg,File,Line)
#define CLRTRACKCOMMENT_VOID
#define DISABLETRACKCOMMENT()
#define ENABLETRACKCOMMENT()
#define MemAlloc SafeHeapAlloc
#define MemReAlloc SafeHeapReAlloc
#define MemFree(x,y,z) HeapFree(x,y,(LPVOID) z)
#define MemCheck(x)
#define DebugHeapCheck(x,y,z)
#define DumpHeapStats()
#define ALLOCATION_TRACKING_DEF
#define ALLOCATION_TRACKING_CALL
#define ALLOCATION_INLINE_CALL
#define InitAllocationTracking()
#define FreeAllocationTracking()
#define DebugRegisterAllocation(t,p,f,l)
#define DebugUnregisterAllocation(t,p)
#endif
#define MemAllocUninit(size) MemAlloc(g_hHeap,0,size)
#define MemAllocZeroed(size) MemAlloc(g_hHeap,HEAP_ZERO_MEMORY,size)
#define FreeMem(ptr) MemFree(g_hHeap,0,ptr)
#ifdef _cplusplus
} #endif
|