home *** CD-ROM | disk | FTP | other *** search
- /*
- * Some simple debugging macros that look and behave a lot like their
- * namesakes in MFC. These macros should work in both C and C++ and
- * do something useful with almost any Win32 compiler.
- *
- * George V. Reilly <georgere@microsoft.com>
- */
-
- #ifndef __DEBUG_H__
- #define __DEBUG_H__
-
- #include <tchar.h>
-
- #ifdef _DEBUG
-
- # if defined(_MSC_VER) && (_MSC_VER >= 1000)
- /* Use the new debugging tools in Visual C++ 4.x */
- # include <crtdbg.h>
- /* _ASSERTE will give a more meaningful message, but the string takes
- * space. Use _ASSERT if this is an issue. */
- # define ASSERT(f) _ASSERTE(f)
- # else
- # include <assert.h>
- # define ASSERT(f) assert(f)
- # endif
-
- # define VERIFY(f) ASSERT(f)
- # define DEBUG_ONLY(f) (f)
- # define TRACE Trace
- # define TRACE0(psz) Trace(_T("%s"), _T(psz))
- # define TRACE1(psz, p1) Trace(_T(psz), p1)
- # define TRACE2(psz, p1, p2) Trace(_T(psz), p1, p2)
- # define TRACE3(psz, p1, p2, p3) Trace(_T(psz), p1, p2, p3)
- # define ASSERT_VALID(pObj) \
- do {ASSERT((pObj) != NULL); (pObj)->AssertValid();} while (0)
- # define DUMP(pObj) \
- do {ASSERT((pObj) != NULL); (pObj)->Dump();} while (0)
- # define DEBUG_INIT() DebugInit()
- # define DEBUG_TERM() DebugTerm()
-
- #else /* !_DEBUG */
-
- /* These macros should all compile away to nothing */
- # define ASSERT(f) ((void)0)
- # define VERIFY(f) ((void)(f))
- # define DEBUG_ONLY(f) ((void)0)
- # define TRACE 1 ? (void)0 : Trace
- # define TRACE0(psz)
- # define TRACE1(psz, p1)
- # define TRACE2(psz, p1, p2)
- # define TRACE3(psz, p1, p2, p3)
- # define ASSERT_VALID(pObj) ((void)0)
- # define DUMP(pObj) ((void)0)
- # define DEBUG_INIT() ((void)0)
- # define DEBUG_TERM() ((void)0)
-
- #endif /* !_DEBUG */
-
-
- #define ASSERT_POINTER(p, type) \
- ASSERT(((p) != NULL) && IsValidAddress((p), sizeof(type), FALSE))
-
- #define ASSERT_NULL_OR_POINTER(p, type) \
- ASSERT(((p) == NULL) || IsValidAddress((p), sizeof(type), FALSE))
-
-
- /* Declarations for non-Windows apps */
-
- #ifndef _WINDEF_
- typedef void* LPVOID;
- typedef const void* LPCVOID;
- typedef unsigned int UINT;
- typedef int BOOL;
- typedef const char* LPCTSTR;
- #endif /* _WINDEF_ */
-
- #ifndef TRUE
- # define FALSE 0
- # define TRUE 1
- #endif
-
-
- #ifdef __cplusplus
- extern "C" {
-
- /* Low-level sanity checks for memory blocks */
- BOOL IsValidAddress(LPCVOID pv, UINT nBytes, BOOL fReadWrite = TRUE);
- BOOL IsValidString(LPCTSTR ptsz, int nLength = -1);
-
- #else /* !__cplusplus */
-
- /* Low-level sanity checks for memory blocks */
- BOOL IsValidAddress(LPCVOID pv, UINT nBytes, BOOL fReadWrite);
- BOOL IsValidString(LPCTSTR ptsz, int nLength);
-
- #endif /* !__cplusplus */
-
- /* in debug version, writes trace messages to debug stream */
- void __cdecl
- Trace(
- LPCTSTR pszFormat,
- ...);
-
- /* should be called from main(), WinMain(), or DllMain() */
- void
- DebugInit();
-
- void
- DebugTerm();
-
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
-
- #endif /* __DEBUG_H__ */
-