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.
159 lines
4.0 KiB
159 lines
4.0 KiB
/*++
|
|
|
|
Copyright (c) 1994-1999 Microsoft Corporation
|
|
|
|
Module Name :
|
|
|
|
debugafx.h
|
|
|
|
Abstract:
|
|
|
|
Debugging routines using AFX/MFC extensions
|
|
|
|
Author:
|
|
|
|
Ronald Meijer (ronaldm)
|
|
|
|
Project:
|
|
|
|
Internet Services Manager
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
|
|
#ifndef _DEBUGAFX_H
|
|
#define _DEBUGAFX_H
|
|
|
|
|
|
|
|
#if defined(_DEBUG) || DBG
|
|
//
|
|
// Defined private ASSERT macros because they're not available
|
|
// in SDK builds (which always uses retail MFC)
|
|
//
|
|
#undef ATLASSERT
|
|
#undef ASSERT
|
|
#undef _ASSERTE
|
|
#undef VERIFY
|
|
|
|
#define _ASSERTE(expr)\
|
|
do { if (!(expr) &&\
|
|
(IISUIFireAssert(__FILE__, __TIMESTAMP__, __LINE__, #expr)==1))\
|
|
DebugBreak(); } while (0)
|
|
|
|
#define ASSERT(expr) _ASSERTE(expr)
|
|
|
|
#define VERIFY(expr) _ASSERTE(expr)
|
|
#define ATLASSERT(expr) _ASSERTE(expr)
|
|
|
|
#define ASSERT_PTR(ptr) _ASSERTE(ptr != NULL);
|
|
#define ASSERT_READ_PTR(ptr) _ASSERTE(ptr != NULL && !IsBadReadPtr(ptr, sizeof(*ptr)));
|
|
#define ASSERT_READ_PTR2(ptr, cb) _ASSERTE(ptr != NULL && !IsBadReadPtr(ptr, cb));
|
|
#define ASSERT_WRITE_PTR(ptr) _ASSERTE(ptr != NULL && !IsBadWritePtr(ptr, sizeof(*ptr)));
|
|
#define ASSERT_WRITE_PTR2(ptr, cb) _ASSERTE(ptr != NULL && !IsBadWritePtr(ptr, cb));
|
|
#define ASSERT_READ_WRITE_PTR(ptr) ASSERT_READ_PTR(ptr); ASSERT_WRITE_PTR(ptr);
|
|
#define ASSERT_READ_WRITE_PTR2(ptr, cb) ASSERT_READ_PTR2(ptr, cb); && ASSERT_WRITE_PTR2(ptr, cb);
|
|
#define ASSERT_MSG(msg)\
|
|
do { if (IISUIFireAssert(__FILE__, __TIMESTAMP__, __LINE__, msg)==1)\
|
|
DebugBreak(); } while (0)
|
|
|
|
int COMDLL IISUIFireAssert(
|
|
const char * filename,
|
|
const char * timestamp,
|
|
int linenum,
|
|
const char * expr
|
|
);
|
|
|
|
#else
|
|
//
|
|
// Retail
|
|
//
|
|
#define ASSERT_PTR(ptr)
|
|
#define ASSERT_READ_PTR(ptr)
|
|
#define ASSERT_READ_PTR2(ptr, cb)
|
|
#define ASSERT_WRITE_PTR(ptr)
|
|
#define ASSERT_WRITE_PTR2(ptr, cb)
|
|
#define ASSERT_READ_WRITE_PTR(ptr)
|
|
#define ASSERT_READ_WRITE_PTR2(ptr, cb)
|
|
#define ASSERT_MSG(msg)
|
|
|
|
#endif // _DEBUG || DBG
|
|
|
|
|
|
|
|
#if defined(_DEBUG) || DBG
|
|
|
|
#ifndef _DEBUG
|
|
//
|
|
// SDK Build environment
|
|
//
|
|
extern COMDLL CDumpContext afxDump;
|
|
extern COMDLL BOOL afxTraceEnabled;
|
|
#endif // _DEBUG
|
|
|
|
//
|
|
// ENUM for special debug output control tokens
|
|
//
|
|
enum ENUM_DEBUG_AFX
|
|
{
|
|
EDBUG_AFX_EOL = -1
|
|
};
|
|
|
|
#define TRACEFMTPGM DbgFmtPgm(THIS_FILE, __LINE__)
|
|
#define TRACEOUT(x) { afxDump << x; }
|
|
#define TRACEEOL(x) { afxDump << x << EDBUG_AFX_EOL; }
|
|
#define TRACEEOLID(x) { afxDump << TRACEFMTPGM << x << EDBUG_AFX_EOL; }
|
|
#define TRACEEOLERR(err,x) { if (err) TRACEEOLID(x) }
|
|
|
|
//
|
|
// Append an EOL onto the debug output stream
|
|
//
|
|
COMDLL CDumpContext & operator <<(
|
|
IN CDumpContext & out,
|
|
IN ENUM_DEBUG_AFX edAfx
|
|
);
|
|
|
|
#ifndef UNICODE
|
|
|
|
COMDLL CDumpContext & operator <<(
|
|
IN CDumpContext & out,
|
|
IN LPCWSTR pwchStr
|
|
);
|
|
|
|
#endif UNICODE
|
|
|
|
//
|
|
// Format a program name and line number for output (removes the path info)
|
|
//
|
|
COMDLL extern LPCSTR DbgFmtPgm(
|
|
IN LPCSTR szFn,
|
|
IN int line
|
|
);
|
|
|
|
COMDLL CDumpContext & operator <<(
|
|
IN CDumpContext & out,
|
|
IN const GUID & guid
|
|
);
|
|
|
|
#else // !_DEBUG
|
|
|
|
//
|
|
// Retail definitions
|
|
//
|
|
#define TRACEOUT(x) ;
|
|
#define TRACEEOL(x) ;
|
|
#define TRACEEOLID(x) ;
|
|
#define TRACEEOLERR(err, x) ;
|
|
|
|
#endif // _DEBUG
|
|
|
|
#define TRACE_RETURN(msg, err) TRACEEOLID(msg); return err;
|
|
#define TRACE_NOTIMPL(msg) TRACE_RETURN(msg, E_NOTIMPL);
|
|
#define TRACE_NOINTERFACE(msg) TRACE_RETURN(msg, E_NOINTERFACE);
|
|
#define TRACE_UNEXPECTED(msg) TRACE_RETURN(msg, E_UNEXPECTED);
|
|
#define TRACE_POINTER(msg) TRACE_RETURN(msg, E_POINTER);
|
|
|
|
#endif // _DEBUGAFX_H
|