mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.4 KiB
139 lines
3.4 KiB
#ifndef _DEBUG_H_
|
|
#define _DEBUG_H_
|
|
|
|
#ifdef _DEBUG
|
|
#ifdef __cplusplus
|
|
|
|
#include "cstd.h"
|
|
|
|
class INI
|
|
{
|
|
public:
|
|
static UINT DtgProfileString( const TCHAR *szValue,
|
|
const TCHAR *szDefault,
|
|
TCHAR *szResult,
|
|
INT cbResult,
|
|
const TCHAR *szSection = _szSection );
|
|
|
|
static UINT DtgProfileInt( const TCHAR *szValue,
|
|
INT iDefault,
|
|
const TCHAR *szSection = _szSection );
|
|
|
|
static const TCHAR* SzDebugSection () { return _szSection ; }
|
|
static const TCHAR* SzToolSection () { return _szSection ; }
|
|
|
|
static BOOL DtgProfileTestDbgFlag(UINT fDbgFlag, BOOL fOr);
|
|
|
|
static BOOL FExitOnAssert()
|
|
{
|
|
return DtgProfileInt(_szAssertExit, bTrue);
|
|
}
|
|
|
|
static UINT CAssertToPost()
|
|
{
|
|
return DtgProfileInt(_szAssertCount, 10);
|
|
}
|
|
|
|
static BOOL FAssertOnLeak()
|
|
{
|
|
return DtgProfileInt(_szAssertMemLeak, bTrue);
|
|
}
|
|
|
|
static BOOL FDebugFlag()
|
|
{
|
|
return DtgProfileInt(_szActive, bFalse);
|
|
}
|
|
|
|
static VOID WriteCallocStop(UINT cAlloc);
|
|
|
|
static UINT CallocStopRead()
|
|
{
|
|
return DtgProfileInt(_szCallocStop, 0);
|
|
}
|
|
|
|
private:
|
|
static const TCHAR* _szName;
|
|
static const TCHAR* _szSection;
|
|
static const TCHAR* _szToolSection;
|
|
static const TCHAR* _szActive;
|
|
static const TCHAR* _szAssertExit;
|
|
static const TCHAR* _szAssertCount;
|
|
static const TCHAR* _szAssertMemLeak;
|
|
static const TCHAR* _szDebugFlag;
|
|
static const TCHAR* _szCallocStop;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
#define Assert(cond) AssertSz(cond, #cond)
|
|
|
|
VOID DebugAppExit();
|
|
|
|
// Return TRUE if the given bit(s) are on in the debug flag.
|
|
// If 'fOr', any bit returns TRUE; if !fOr all bits must match.
|
|
//extern BOOL DtgProfileTestDbgFlag ( UINT fDbgFlag, BOOL fOr = TRUE );
|
|
|
|
// Return just the file name from a possibly full path.
|
|
extern const char * DtgDbgReduceFileName ( const char * pszFileName ) ;
|
|
|
|
#ifdef _DEBUG
|
|
typedef UINT LINE;
|
|
|
|
#define AssertData() static SZ __file__ = __FILE__
|
|
|
|
extern VOID PrintFileLine(SZ, UINT);
|
|
extern VOID AssertFailed(SZC szFile, LINE line, SZC szCond, BOOL bFatal);
|
|
extern VOID DBVPrintf(SZ, ...);
|
|
extern VOID CheckHeap();
|
|
extern VOID NYI();
|
|
extern VOID NotReached();
|
|
extern BOOL fDebug;
|
|
|
|
#if defined(MSBN)
|
|
#define AssertSafeAlloc(count,typnam) \
|
|
AssertSzFatal((long) count * sizeof(typnam) < 65535L,\
|
|
"Attempt to allocate > 64K in block")
|
|
#define DebugMSBN(x) x
|
|
#else
|
|
#define AssertSafeAlloc(count, typnam)
|
|
#define DebugMSBN(x)
|
|
#endif
|
|
// Assert-with-messge macro; allows continuation skipping problem
|
|
#define AssertSz(cond, sz)\
|
|
if (!(cond))\
|
|
AssertFailed(__file__, __LINE__, sz, fFalse);\
|
|
else
|
|
|
|
// Assert-with-message macro; forces program termination
|
|
#define AssertSzFatal(cond, sz)\
|
|
if (!(cond))\
|
|
AssertFailed(__file__, __LINE__, sz, fTrue);\
|
|
else
|
|
|
|
#define Verify(x) Assert(x)
|
|
#define Debug(x) x
|
|
|
|
#define DBPrintf(fLevel, arglist)\
|
|
((fDebug & fLevel) ? (PrintFileLine(__FILE__, __LINE__),\
|
|
(DBVPrintf arglist),\
|
|
DBVPrintf("\r\n")) : 0)\
|
|
|
|
#else // DEBUG
|
|
|
|
// Null definitions for debug-message functions
|
|
#define AssertSafeAlloc(count, typnam)
|
|
#define AssertData()
|
|
#define AssertSz(cond, sz)
|
|
#define AssertSzFatal(cond, sz)
|
|
#define Verify(cond) cond
|
|
#define Debug(x)
|
|
#define DebugMSBN(x)
|
|
#define DBPrintf(x, y)
|
|
#define CheckHeap()
|
|
#define NYI()
|
|
#define NotReached()
|
|
#define Trace(szFunc)
|
|
|
|
#endif // _DEBUG
|
|
|
|
#endif // _DEBUG_H_
|