150 lines
4.3 KiB
C++
150 lines
4.3 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1993.
|
|
//
|
|
// File: debug.hxx
|
|
//
|
|
// Contents: Debug routines.
|
|
//
|
|
// Classes: None.
|
|
//
|
|
// Functions: TBD : Fill in.
|
|
//
|
|
// History: 08-Sep-95 EricB Created.
|
|
// 01-Dec-95 MarkBl Split from util.hxx.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef __DEBUG_HXX__
|
|
#define __DEBUG_HXX__
|
|
|
|
void SchMsg(TCHAR * pwszMsg, int iStringID, ...);
|
|
void SchError(int iStringID, int iParam = 0);
|
|
|
|
// macros
|
|
|
|
//+----------------------------------------------------------------------------
|
|
// Macro: LOGICAL_NE
|
|
// Purpose: any non-zero is true, so compare them logically
|
|
//-----------------------------------------------------------------------------
|
|
#define LOGICAL_NE(x, y) ((x != 0) != (y != 0))
|
|
|
|
//+----------------------------------------------------------------------------
|
|
// Macro: TESTHR
|
|
// Purpose: tests the HRESULT for error, takes "action" if found
|
|
//-----------------------------------------------------------------------------
|
|
#define TESTHR(hr, str, action) \
|
|
if (FAILED(hr)) \
|
|
{ \
|
|
schDebugOut((DEB_ERROR, #str " failed with error 0x%x\n", hr)); \
|
|
action; \
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
// Macro: WIN32FAIL
|
|
// Purpose: tests the arg x for NULL, takes 'action' if true
|
|
//-----------------------------------------------------------------------------
|
|
#define WIN32FAIL(x, str, action) \
|
|
if (x == NULL) \
|
|
{ \
|
|
DWORD dwErr = GetLastError(); \
|
|
schDebugOut((DEB_ERROR, #str " failed with error %lu", dwErr)); \
|
|
action; \
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
// Macro: LOAD_STRING
|
|
// Purpose: attempts to load a string, takes "action" if fails
|
|
//-----------------------------------------------------------------------------
|
|
#define LOAD_STRING(ids, wcs, len, action) \
|
|
if (!LoadString(g_hInstance, ids, wcs, len - 1)) \
|
|
{ \
|
|
DWORD dwErr = GetLastError(); \
|
|
schDebugOut((DEB_ERROR, "LoadString of " #ids " failed with error %lu", dwErr)); \
|
|
action; \
|
|
}
|
|
|
|
//
|
|
// debugging support
|
|
//
|
|
|
|
#if DBG == 1
|
|
|
|
DECLARE_DEBUG(Sched)
|
|
|
|
#define schDebugOut(x) SchedInlineDebugOut x
|
|
#define schAssert(x) Win4Assert(x);
|
|
#define InitDebug() InitializeDebugging()
|
|
|
|
#ifdef UNICODE
|
|
#define FMT_TSTR "%S"
|
|
#else
|
|
#define FMT_TSTR "%s"
|
|
#endif
|
|
|
|
#define ERR_OUT(msg, hr) \
|
|
if (hr == 0) { \
|
|
schDebugOut((DEB_ERROR, #msg "\n")); \
|
|
} else { \
|
|
schDebugOut((DEB_ERROR, #msg " failed with error 0x%x\n", hr)); \
|
|
}
|
|
|
|
#define CHECK_HRESULT(hr) \
|
|
if ( FAILED(hr) ) \
|
|
{ \
|
|
schDebugOut((DEB_ERROR, \
|
|
"**** ERROR RETURN <%s @line %d> -> %08lx\n", \
|
|
__FILE__, \
|
|
__LINE__, \
|
|
hr)); \
|
|
}
|
|
|
|
#define TRACE(ClassName,MethodName) \
|
|
schDebugOut((DEB_ITRACE, #ClassName"::"#MethodName"(0x%x)\n", this)); \
|
|
if (SchedInfoLevel & DEB_USER1) HeapValidate(GetProcessHeap(), 0, NULL);
|
|
|
|
#define TRACE2(ClassName,MethodName) \
|
|
schDebugOut((DEB_USER2, #ClassName"::"#MethodName"(0x%x)\n", this)); \
|
|
if (SchedInfoLevel & DEB_USER1) HeapValidate(GetProcessHeap(), 0, NULL);
|
|
|
|
#define TRACE3(ClassName,MethodName) \
|
|
schDebugOut((DEB_USER3, #ClassName"::"#MethodName"(0x%x)\n", this)); \
|
|
if (SchedInfoLevel & DEB_USER1) HeapValidate(GetProcessHeap(), 0, NULL);
|
|
|
|
#define TRACE_FUNCTION(FunctionName) \
|
|
schDebugOut((DEB_ITRACE, #FunctionName"\n"));
|
|
|
|
#define TRACE_FUNCTION3(FunctionName) \
|
|
schDebugOut((DEB_USER3, #FunctionName"\n"));
|
|
|
|
#define DBG_OUT(String) \
|
|
schDebugOut((DEB_ITRACE, String "\n"));
|
|
|
|
#define DBG_OUT3(String) \
|
|
schDebugOut((DEB_USER3, String "\n"));
|
|
|
|
#define DEB_IDLE DEB_USER4
|
|
|
|
#else
|
|
|
|
#define schDebugOut(x)
|
|
#define schedDebugOut(x)
|
|
#define schAssert(x)
|
|
#define schAssertAndAction(x, action)
|
|
#define InitDebug()
|
|
|
|
#define ERR_OUT(msg, hr)
|
|
#define CHECK_HRESULT(hr)
|
|
#define TRACE(ClassName,MethodName)
|
|
#define TRACE2(ClassName,MethodName)
|
|
#define TRACE3(ClassName,MethodName)
|
|
#define TRACE_FUNCTION(FunctionName)
|
|
#define TRACE_FUNCTION3(FunctionName)
|
|
#define DBG_OUT(String)
|
|
#define DBG_OUT3(String)
|
|
|
|
#endif // DBG == 1
|
|
|
|
#endif // __DEBUG_HXX__
|