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.
|
|
//+-------------------------------------------------------------------------
//
// 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
|