Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

142 lines
3.1 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1998
//
// File: dbg.h
//
//--------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////
// debug helpers
#if defined(_USE_MTFRMWK_TRACE)
#if defined(TRACE)
#undef TRACE
void MtFrmwkTrace(LPCWSTR, ...);
#define TRACE MtFrmwkTrace
#endif
#else
#if defined(TRACE)
#undef TRACE
#define TRACE
#endif
#endif
#if defined(DBG)
void MtFrmwkLogFile(LPCTSTR lpszFormat, ...);
void MtFrmwkLogFileIfLog(BOOL bLog, LPCTSTR lpszFormat, ...);
//
// Copied from burnslib on 12-07-1999
//
#define TRACET MtFrmwkLogFile
#define TRACE_LOGFILE MtFrmwkLogFile
#define TRACE_LOGFILE_IF_NO_UI MtFrmwkLogFileIfLog
#define TRACE_SCOPET(bLog, msg) \
CScopeTracer __tracer(bLog, msg);
#define TRACE_FUNCTION(func) TRACE_SCOPET(TRUE, TEXT(#func))
#define TRACE_FUNCTION_IF_NO_UI(bLog, func) TRACE_SCOPET(bLog, TEXT(#func))
#else
#define TRACET
#define TRACE_LOGFILE
#define TRACE_LOGFILE_IF_NO_UI
#define TRACE_SCOPET(bLog, msg)
#define TRACE_FUNCTION(func)
#define TRACE_FUNCTION_IF_NO_UI(bLog, func)
#endif // defined(DBG)
// A ScopeTracer object emits text to the log upon construction and
// destruction. Place one at the beggining of a lexical scope, and it will
// log when the scope is entered and exited.
//
// See TRACE_SCOPE, TRACE_CTOR, TRACE_DTOR, TRACE_FUNCTION, TRACE_FUNCTION2
class CScopeTracer
{
public:
CScopeTracer(BOOL bLog, PCWSTR pszMessage);
~CScopeTracer();
private:
CString szMessage;
BOOL m_bLog;
};
//
// Log provides an interface to a singleton application logging facility.
//
class CLogFile
{
friend class CScopeTracer;
public:
//
// Returns a pointer to the single CLogFile instance.
//
static CLogFile* GetInstance();
//
// Closes and deletes the single CLogFile instance. If GetInstance is
// called after this point, then a new instance will be created.
//
static void KillInstance();
//
// Returns true if the log file is open, false if not.
//
BOOL IsOpen() const;
void writeln(PCWSTR pszText);
void indent();
void outdent();
private:
CLogFile(PCWSTR logBaseName);
~CLogFile();
CString szBase_name;
HANDLE file_handle;
unsigned trace_line_number;
//
// not implemented; no instance copying allowed.
//
CLogFile(const CLogFile&);
const CLogFile& operator=(const CLogFile&);
};
#if defined(_USE_MTFRMWK_ASSERT)
#undef ASSERT
#undef VERIFY
#undef THIS_FILE
#define THIS_FILE __FILE__
BOOL MtFrmwkAssertFailedLine(LPCSTR lpszFileName, int nLine);
#define ASSERT(f) \
do \
{ \
BOOL bPrefast = (f && L"a hack so that prefast doesn't bark"); \
if (!(bPrefast) && MtFrmwkAssertFailedLine(THIS_FILE, __LINE__)) \
::DebugBreak(); \
} while (0) \
#define VERIFY(f) ASSERT(f)
#endif // _USE_MTFRMWK_ASSERT