67 lines
1.7 KiB
C++
67 lines
1.7 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft Windows NT **/
|
||
|
/** Copyright(c) Microsoft Corp., 1991 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
heapdbg.hxx
|
||
|
Win3 Heap Manager debug aid
|
||
|
|
||
|
FILE HISTORY:
|
||
|
DavidHov 11/22/91 Created
|
||
|
KeithMo 21-Apr-1992 Added multi-level stack backtrace.
|
||
|
KeithMo 12-Aug-1992 Robustified stack backtrace a bit.
|
||
|
*/
|
||
|
|
||
|
#ifdef HEAPDEBUG
|
||
|
|
||
|
//
|
||
|
// This manifest constant controls the "depth" of the stack backtrace
|
||
|
// displayed when heap residue exists after an application has
|
||
|
// terminated.
|
||
|
//
|
||
|
// This value *must* be no greater than MAX_STACK_DEPTH (as
|
||
|
// #defined in NTRTL.H (currently 16, should be plenty).
|
||
|
//
|
||
|
// KEEP IN MIND THAT EACH BACKTRACE LEVEL REQUIRES AN ADDITIONAL
|
||
|
// FOUR BYTES OF STORAGE FOR *EVERY* HEAP ALLOCATION BLOCK!!
|
||
|
//
|
||
|
|
||
|
#define RESIDUE_STACK_BACKTRACE_DEPTH 4
|
||
|
|
||
|
struct HEAPTAG
|
||
|
{
|
||
|
struct HEAPTAG * _phtRight, * _phtLeft;
|
||
|
|
||
|
UINT _uSignature;
|
||
|
|
||
|
PVOID _pvRetAddr[RESIDUE_STACK_BACKTRACE_DEPTH];
|
||
|
UINT _cFrames;
|
||
|
UINT _usSize;
|
||
|
VOID Init()
|
||
|
{
|
||
|
_phtLeft = _phtRight = this;
|
||
|
}
|
||
|
VOID Link( HEAPTAG * phtAfter )
|
||
|
{
|
||
|
_phtLeft = phtAfter;
|
||
|
_phtRight = phtAfter->_phtRight;
|
||
|
_phtRight->_phtLeft = this;
|
||
|
phtAfter->_phtRight = this;
|
||
|
}
|
||
|
VOID Unlink()
|
||
|
{
|
||
|
_phtRight->_phtLeft = _phtLeft;
|
||
|
_phtLeft->_phtRight = _phtRight;
|
||
|
Init();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
extern HEAPTAG * pHeapBase;
|
||
|
|
||
|
#endif // HEAPDEBUG
|
||
|
|
||
|
extern VOID HeapResidueIter( UINT cMaxResidueBlocksToDump,
|
||
|
BOOL fBreakIfResidue );
|
||
|
|