⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trace.cpp

📁 C++ patterns设计模式
💻 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 + -