📄 trace.cpp
字号:
////////////////////////////////////////////////////////////////////////////////
// 文件形式调试的Tracer
////////////////////////////////////////////////////////////////////////////////
// Author : Darkay Li
// Description : 跟踪器,为了方便移植将跟踪消息写入特定的文件而不是送到调试器。
// 跟踪器被设计成一个Singleton(Meyer定义式)
// 函数trace定义可变参数接口
// Version : 1.0
//
// Standard include files : std_inc.hpp(include in precompile header
//
// Start Date : 2003年5月12日
//
// Change Log : 2003年5月12日 by Darkay Li -- Created
////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "trace.h"
#include "patterns/singleton/singleton.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
namespace
{
// file just for this file
class FileTracer : public stk::StaticSingleton<FileTracer>
{
public:
void trace(const char* format, va_list argptr)
{
if(m_handle)
{
vfprintf(m_handle, format, argptr);
fflush(m_handle);
}
}
void FileTracer::enable(bool enable)
{
enable ? open() : close();
}
#if _MSC_VER>1300
private:
#endif
friend class stk::StaticSingleton<FileTracer>;
FileTracer(const char* filename = "./trace.dat")
{
m_handle = 0;
m_filename = filename;
open();
}
FileTracer::~FileTracer()
{
close();
}
//no assign
operator = (const FileTracer& rht);
void open()
{
if(!m_handle)
{
m_handle = ::fopen(m_filename.c_str(), "wt");
}
}
void FileTracer::close()
{
if(m_handle)
{
::fclose(m_handle);
m_handle = 0;
}
}
private:
std::string m_filename;
FILE* m_handle;
};
}
namespace stk
{
//////////////////////////////////////////////////////////////////////////////
// Function Name : trace
// Author : Darkay Li
// Description : output the trace data to trace file
// Input Parameters :
// Return Value :
// Ext Function called :
// Start Date : 2003年5月16日
// Change log : 2003年5月16日 by Darkay Li -- Created
//////////////////////////////////////////////////////////////////////////////
void trace(const char *format, ...)
{
va_list argptr;
va_start(argptr, format);
FileTracer::instance()->trace(format, argptr);
va_end(argptr);
}
void setTracer(TRACE_MODE mode)
{
FileTracer::instance()->enable(mode == TRACE_ON);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -