|
|
#ifndef __DBG_HXX__
#define __DBG_HXX__
#define DEBUG_OUT(x)
#define DECLARE_HEAPCHECKING
#define DEBUGCHECK
#define TRACE(ClassName,MethodName)
#define TRACE_FUNCTION(FunctionName)
#define CHECK_HRESULT(hr)
#define CHECK_LASTERROR(lr)
#define VERIFY(x) x
#define DEBUG_OUT_LASTERROR
#define DEBUG_ASSERT(e)
#define PosDisplay(sz)
#define DbxDisplay(sz)
#define DbxResult(e)
#if DBG==1
#define DEB_TRACE1 DEB_USER1
// debug style : 1 - use dbg out, 2 - use message boxes
#define DBG_STYLE 1
#if defined(_CHICAGO_) && defined(DBX)
#undef DBG_STYLE
#define DBG_STYLE 1
#endif
////////////////////////////////////////////////////////////////////////////
//
// Style 1: Debug out to stdout
//
#if DBG_STYLE==1
DECLARE_DEBUG(Job)
#undef DEBUG_OUT
#define DEBUG_OUT(x) JobInlineDebugOut x
extern DWORD dwHeapChecking; #undef DECLARE_HEAPCHECKING
#define DECLARE_HEAPCHECKING DWORD dwHeapChecking = 0
#undef DEBUGCHECK
#define DEBUGCHECK \
if ( (dwHeapChecking & 0x1) == 0x1 ) \ HeapValidate(GetProcessHeap(),0,NULL)
#undef TRACE
#define TRACE(ClassName,MethodName) \
DEBUGCHECK; \ DEBUG_OUT((DEB_TRACE, #ClassName"::"#MethodName"(%x)\n", this));
#undef TRACE_FUNCTION
#define TRACE_FUNCTION(FunctionName) \
DEBUGCHECK; \ DEBUG_OUT((DEB_TRACE, #FunctionName"\n"));
#undef CHECK_HRESULT
#define CHECK_HRESULT(hr) \
if ( FAILED(hr) ) \ { \ DEBUG_OUT((DEB_ERROR, \ "**** ERROR RETURN <%s @line %d> -> %08lx\n", \ __FILE__, \ __LINE__, \ hr)); \ }
#undef CHECK_LASTERROR
#define CHECK_LASTERROR(lr) \
if ( lr != ERROR_SUCCESS ) \ { \ DEBUG_OUT((DEB_ERROR, \ "**** ERROR RETURN <%s @line %d> -> %dL\n", \ __FILE__, \ __LINE__, \ lr)); \ }
#undef VERIFY
#define VERIFY(x) Win4Assert(x)
#undef DEBUG_OUT_LASTERROR
#define DEBUG_OUT_LASTERROR \
DEBUG_OUT((DEB_ERROR, \ "**** ERROR RETURN <%s @line %d> -> %dL\n", \ __FILE__, \ __LINE__, \ GetLastError()));
#undef DEBUG_ASSERT
#define DEBUG_ASSERT(e) \
if ((e) == FALSE) \ { \ DEBUG_OUT((DEB_ERROR, \ "**** ASSERTION <%s> FAILED <%s @line %d>\n", \ #e, \
__FILE__, \ __LINE__)); \ }
#endif // DBG_STYLE==1
////////////////////////////////////////////////////////////////////////////
//
// Style 2: Debug out to message box
//
#if DBG_STYLE==2
extern TCHAR emsg[300];
#define PRINT_LR(lr) \
wsprintf(emsg, "<%s @ %d> %dL\n", __FILE__, __LINE__, (lr))
#define PRINT_HR(hr) \
wsprintf(emsg, "<%s @ %d> 0x%x\n", __FILE__, __LINE__, (hr))
#define DISP_ERRMSG MessageBox(NULL, emsg, TEXT("**** ERROR ****"), MB_OK)
#define DISP_MSG MessageBox(NULL, emsg, TEXT("**** TRACE ****"), MB_OK)
#undef CHECK_LASTERROR
#define CHECK_LASTERROR(lr) \
if (lr != ERROR_SUCCESS) { PRINT_LR(lr); DISP_ERRMSG; }
#undef DEBUG_OUT_LASTERROR
#define DEBUG_OUT_LASTERROR { PRINT_LR(GetLastError()); DISP_ERRMSG; }
#undef CHECK_HRESULT
#define CHECK_HRESULT(hr) \
if ( FAILED(hr) ) { PRINT_HR(hr); DISP_ERRMSG; }
#undef PosDisplay
#define PosDisplay(e) \
wsprintf(emsg, "<%s @ %d>\n\n\t %s", __FILE__, __LINE__, #e); DISP_MSG
#endif // DBG_STYLE==2
////////////////////////////////////////////////////////////////////////////
//
// Simple DBX messages
//
#ifdef DBX
#undef DbxDisplay
#define DbxDisplay(sz) MessageBoxA(NULL, sz, "DBX", MB_OK);
#undef DbxResult
#define DbxResult(e) \
{ \ char Buff[100]; \ if (FAILED(hr)) \ { \ sprintf(Buff, "%s failed (%x)", #e, hr); \ } \ else \ { \ sprintf(Buff, "%s succeeded", #e); \ } \ MessageBoxA(NULL, Buff, "DBX", MB_OK); \ } #endif // DBX
#endif // DBG==1
#endif // __DBG_HXX__
|