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.
142 lines
3.1 KiB
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
|
|
|
|
|