/////ACE是个好东西//在学习ACE的过程中,对它的调试进行了简单的浏览,//以下的一些方法便是来源ACE的启发.代码非常简单,个人认为还算实用而已.
//以下代码仅供学习参考,实际应用请自行负责.
//Author:古斌亮
//e-mail:lonly_gun@hotmail.com///
#include <time.h>
#include <string>using std::string;
/////下面的logger类唯一的功能就是// 可以运行时对调试信息进行重定向///class dbg_logger{public: virtual ~ dbg_logger(){}
public: static void set(FILE * fp){_fp = (FILE*)fp;}
public: static void dbg_log(const char * format,...) { va_list args; va_start(args,format); vfprintf(_fp,format,args); va_end(args); }
private: static FILE * _fp;};
//static FILE * dbg_logger::_fp = (FILE*)stdout;
/////下面这个宏定义可以实现对时间,日期,调试代码行,文件的调试输出,在应用中可以依据//实际情况选择使用///#define DBG_TRACE(format) / dbg_logger::dbg_log("[%s %s line %d in %s]:",__DATE__,__TIME__,__LINE__,__FILE__); / dbg_logger::dbg_log##format;
/////比如可以简单如下使用/////#define DBG_LOG(format) /// dbg_logger::dbg_log("[line %d in %s]:",__LINE__,__FILE__); /// dbg_logger::dbg_log##format;
/////下面debuger类和DBG_DEBUG宏// 可以实现运行时对一块区域代码的程序流程进行简单跟踪,///class dbg_debuger : public dbg_logger{protected: string _dbg_string;public: dbg_debuger(const char * s):_dbg_string(s) { //dbg_logger:: dbg_log("%s %s entry %s .../n",__DATE__,__TIME__,_dbg_string.c_str()); } virtual ~dbg_debuger() { //dbg_logger:: dbg_log("%s %s leave %s .../n",__DATE__,__TIME__,_dbg_string.c_str()); }};
#define DBG_DEBUG(format) / dbg_logger::dbg_log("[line %d in %s]:",__LINE__,__FILE__); / dbg_debuger _debuger_(format)
/////该函数对DBG_DEBUG进行了演示///void test_debug(){ DBG_DEBUG("test_debug");
//test 2 { DBG_DEBUG("test 2"); }}
/////下面对以上的调试进行了演示///int _tmain(int argc, _TCHAR* argv[]){ DBG_DEBUG("_tmain");
DBG_TRACE(("trace test %d ... /n",1));
DBG_TRACE(("trace test %s .../n","string"));
test_debug();
system("PAUSE");
return 0;}
