313 lines
10 KiB
C++
313 lines
10 KiB
C++
// ==========================================================================
|
|
// Class Specification :
|
|
// COXTrace
|
|
// ==========================================================================
|
|
|
|
// Header file : OXTrace.h
|
|
|
|
// Version: 9.3
|
|
|
|
// This software along with its related components, documentation and files ("The Libraries")
|
|
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
|
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
|
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
|
// to obtain this file, or directly from our office. For a copy of the license governing
|
|
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
|
|
|
/*
|
|
COXTrace
|
|
|
|
Hierarchy:
|
|
COXTrace
|
|
|
|
COXTrace, and its supporting macros, provide an extension to the TRACE() macros that
|
|
are supplied with MFC. These extensions include:
|
|
1. Built-in word wrapping
|
|
2. Copying of the trace output to a file
|
|
3. Automatic marking of the start and end of a block of code
|
|
4. Automatic indenting of the messages to provide a way to track nesting of COXTrace
|
|
blocks.
|
|
|
|
The macros provide a means for quickly removing all of the tracing code from your
|
|
project, without editing your files.
|
|
|
|
*/
|
|
|
|
//
|
|
// Undefine the macros, just in case
|
|
//
|
|
#undef OXTRACE
|
|
#undef OXTRACE_MSG
|
|
#undef OXTRACE_MSGVAL
|
|
#undef OXTRACE_WATCH
|
|
#undef OXTRACE_FMSG
|
|
#undef OXTRACE_SETWRAPWIDTH
|
|
#undef OXTRACE_SETDUMPFILE
|
|
#undef OXTRACE_SETFLUSH
|
|
#undef OXTRACE_EMPTY
|
|
|
|
#if defined(OXTRACEON)
|
|
#define OXTRACE(lpstrMsg) COXTrace __oxTrace(lpstrMsg)
|
|
#define OXTRACE_WRITE(lpstrMsg) __oxTrace.Write(lpstrMsg)
|
|
#define OXTRACE_WRITEVAL(lpstrMsg, pVal) __oxTrace.Write((lpstrMsg), (pVal))
|
|
#define OXTRACE_WATCH(pVar) __oxTrace.Write( #pVar _T(" == "), (pVar))
|
|
#define OXTRACE_WRITEFMT __oxTrace.WriteFormatted
|
|
#define OXTRACE_SETINDENTSTEP(nValue) (COXTrace::m_nIndentStep = (nValue))
|
|
#define OXTRACE_SETWRAPWIDTH(nValue) (COXTrace::m_nWrapWidth = (nValue))
|
|
#define OXTRACE_SETPREFIX(bOn) (COXTrace::m_bPrefixOn = (bOn))
|
|
#define OXTRACE_SETDUMPFILE(lpstrFile) COXTrace::SetDumpFile(lpstrFile)
|
|
#define OXTRACE_SETFLUSH(nValue) (COXTrace::m_bFlushOnWrite = (nValue))
|
|
#else
|
|
#define OXTRACE(lpstrMsg)
|
|
#define OXTRACE_WRITE(lpstrMsg)
|
|
#define OXTRACE_WRITEVAL(lpstrMsg, pVal)
|
|
#define OXTRACE_WATCH(pVar)
|
|
#define OXTRACE_SETINDENTSTEP(nValue)
|
|
#define OXTRACE_SETWRAPWIDTH(nValue)
|
|
#define OXTRACE_SETPREFIX(bOn)
|
|
#define OXTRACE_SETDUMPFILE(lpstrFile)
|
|
#define OXTRACE_SETFLUSH(nValue)
|
|
#endif
|
|
|
|
#if !defined(__OXTRACE_H__)
|
|
#define __OXTRACE_H__
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
#include "OXDllExt.h"
|
|
|
|
#ifndef OXTRACEON
|
|
/*
|
|
OXTRACE_WRITEFMT
|
|
Special replacement for the OXTRACE_WRITEFMT macro. When OXTRACEON is not defined,
|
|
this will remove the parameters from OXTRACE_WRITEFMT calls from the code.
|
|
|
|
--- In :
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The parameters for this method will be removed from the compiled code.
|
|
*/
|
|
inline void OXTRACE_WRITEFMT(LPCTSTR , ...)
|
|
{
|
|
;
|
|
}
|
|
#endif
|
|
|
|
class OX_CLASS_DECL COXTrace
|
|
{
|
|
private:
|
|
// The header describing this block of code
|
|
CString m_strHeader;
|
|
// The current indentation level
|
|
static int m_nIndent;
|
|
// Object defining the file that the trace output will be copied to
|
|
static CFile m_File;
|
|
|
|
protected:
|
|
/*
|
|
WriteMsg
|
|
This function performs the actual work of outputing the message to the debugging
|
|
console, as well as to the dump file, if one has been specified.
|
|
|
|
--- In : lpstrMessage : Pointer to the text to be written out.
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
*/
|
|
void WriteMsg(LPCTSTR lpstrMessage);
|
|
|
|
public:
|
|
// The number of symbols the indention will be increased on the next trace block
|
|
static int m_nIndentStep;
|
|
// The number of symbols to use when determining if text output should be
|
|
// wrapped to a new line
|
|
static int m_nWrapWidth;
|
|
// TRUE if tracing is currently enabled
|
|
static BOOL m_bTracing;
|
|
// TRUE if each message should be written with the block's prefix
|
|
static BOOL m_bPrefixOn;
|
|
// TRUE if te file should be flushed after each message is written out
|
|
static BOOL m_bFlushOnWrite;
|
|
|
|
/**
|
|
COXTrace
|
|
Constructor for this object, that will define the beginning of a new trace block,
|
|
outputing a message indicating the start of the block.
|
|
|
|
--- In : lpstrMsg : Pointer to the text to be written out.
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
The indentation level (m_nIndent) is incremented.
|
|
*/
|
|
COXTrace(LPCTSTR lpstrHeader);
|
|
|
|
/*
|
|
~COXTrace
|
|
Destructor for this object. This will be called when a COXTrace falls out of scope.
|
|
A message will be output to mark the end of the block.
|
|
|
|
--- In :
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
The indentation level (m_nIndent) is decremented.
|
|
*/
|
|
virtual ~COXTrace();
|
|
|
|
/*
|
|
SetDumpFile
|
|
Open the specified file for output. Any tracing output generated by
|
|
COXTrace objects will now be copied to this file.
|
|
|
|
--- In : lpstrFilename - The name of the file to write the tracing
|
|
output to.
|
|
nOpenFlags - Sharing and access mode. Specifies the action
|
|
to take when opening the file. Refer to the
|
|
CFile::Open() documentation on details.
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The file will be opened (by default its previous contents
|
|
will be overwritten).
|
|
*/
|
|
static void SetDumpFile(LPCTSTR lpstrFilename,
|
|
UINT nOpenFlags=CFile::modeWrite|CFile::shareDenyWrite|CFile::modeCreate);
|
|
|
|
/*
|
|
SetIndentStep
|
|
Set the number of symbols the indention will be increased when next block of
|
|
TRACE statements is initialized
|
|
|
|
--- In : nIndentStep : number of symbols to increase the indent.
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : Indention step will be changed. By default we use 4. It's good
|
|
idea to call this function before
|
|
*/
|
|
|
|
/*
|
|
WriteFormatted
|
|
Write out a trace message using printf() style formatting for the message.
|
|
|
|
--- In : lpstrFormat : Pointer to a printf() style formatting string
|
|
... : additional arguments, as needed by the formatting string
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
*/
|
|
void WriteFormatted(LPCTSTR lpstrFormat, ...);
|
|
|
|
/*
|
|
Write
|
|
Write out a text message
|
|
|
|
--- In : lpstrMsg : Pointer to the text to be written out.
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
*/
|
|
void Write(LPCTSTR lpstrMsg);
|
|
|
|
/*
|
|
Write
|
|
Write out a text message, followed by the passed in value.
|
|
|
|
--- In : lpstrMsg : Pointer to the text to be written out.
|
|
nValue : Integer value to append to the end of lpstrMsg
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
*/
|
|
void Write(LPCTSTR lpstrMsg, int nValue);
|
|
|
|
/*
|
|
Write
|
|
Write out a text message, followed by the passed in value.
|
|
|
|
--- In : lpstrMsg : Pointer to the text to be written out.
|
|
unValue : Unsigned integer value to append to the end of lpstrMsg
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
*/
|
|
void Write(LPCTSTR lpstrMsg, unsigned int unValue);
|
|
|
|
/*
|
|
Write
|
|
Write out a text message, followed by the passed in value.
|
|
|
|
--- In : lpstrMsg : Pointer to the text to be written out.
|
|
lValue : Long integer value to append to the end of lpstrMsg
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
*/
|
|
void Write(LPCTSTR lpstrMsg, long lValue);
|
|
|
|
/*
|
|
Write
|
|
Write out a text message, followed by the passed in value.
|
|
|
|
--- In : lpstrMsg : Pointer to the text to be written out.
|
|
ulValue : Unsigned long integer value to append to the end of lpstrMsg
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
*/
|
|
void Write(LPCTSTR lpstrMsg, unsigned long ulValue);
|
|
|
|
/*
|
|
Write
|
|
Write out a text message, followed by the passed in value.
|
|
|
|
--- In : lpstrMsg : Pointer to the text to be written out.
|
|
fValue : Floating point value to append to the end of lpstrMsg
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
*/
|
|
void Write(LPCTSTR lpstrMsg, double fValue);
|
|
|
|
/*
|
|
Write
|
|
Write out a text message, followed by the passed in value.
|
|
|
|
--- In : lpstrMsg : Pointer to the text to be written out.
|
|
lpstrValue : Text string to append to the end of lpstrMsg
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file, will have this
|
|
message sent to them for viewing.
|
|
*/
|
|
void Write(LPCTSTR lpstrMsg, LPCTSTR lpstrValue);
|
|
|
|
/*
|
|
Write
|
|
Write out a text message, followed by the passed in value.
|
|
In this case, the object's Dump() method will be called,
|
|
if _DEBUG is defined. The data will be dumped only to the console.
|
|
|
|
--- In : lpstrMsg : Pointer to the text to be written out.
|
|
rObject : Reference to a CObject derived object.
|
|
--- Out :
|
|
--- Returns :
|
|
--- Effect : The debugging console, and possiblely the dump file,
|
|
will have this message sent to them for viewing.
|
|
*/
|
|
void Write(LPCTSTR lpstrMsg, const CObject& rObject);
|
|
};
|
|
|
|
#endif // !defined(__OXTRACE_H__)
|