接口和bug问题示例

来源:互联网 发布:淘宝店怎么起名字 编辑:程序博客网 时间:2024/06/05 18:47

上次文章里谈了接口和bug问题。 继续谈谈我对这个浅薄的认识。这里继续谈一下技巧(示例工程ftp://vckpub:vckbase@218.75.9.231/CarrotRemindVS.rar)。assert TRACE 在开发中起到重要的作用。 但是似乎还是不够的。 我们需要更好的debug工具。 开发中, 错误是无法预知的。 那么我们需要知道跟踪程序运行时刻的流程, 而不是你去猜想程序到底怎么运行, 这样是十分低效的。我们需要开发一个debug工具, 来记录每次运行时的情况, 一看记录文件, 错误就一目了然。 比如类的构造和析构函数加上debug日志, 记录类的new和delete. 又如记录函数的返回值,很快能发现, 那个函数调用失败了等等。

如何开发一个debug的工具。 我这里给出一组以宏的形式出现的接口。具体实现上就怎么方便怎么写了。 程序是定时提醒。 有兴趣可以到下载。

下面是debug日志文件内容

DEBUG:  CSS_RemindManager::GetInstance [110-1-25 9:12:10]
DEBUG:  CSS_RemindManager::GetInstance: new mInstance [110-1-25 9:12:10]
DEBUG:  CSS_RemindManager::CSS_RemindManager [110-1-25 9:12:10]
DEBUG:  CSS_RemindManager::AddRemind [110-1-25 9:12:10]
DEBUG:  CSS_RemindManager::AddRemind: create a DoRemind [110-1-25 9:12:10]
DEBUG:  CSS_RemindManager::CreateDoRemind(...) [110-1-25 9:12:10]
DEBUG:  CSS_DoRemind::CSS_DoRemind [110-1-25 9:12:10]
DEBUG:  CSS_RemindManager::CreateId [110-1-25 9:12:10]
DEBUG:  CSS_RemindManager::AddRemind: get a id=0 [110-1-25 9:12:10]
DEBUG:  CSS_RemindManager::AddRemind [110-1-25 9:12:10]

接口
////////////////////////////////////////////////////////////
#define CSS_ASSERT(X) /
 do { /
    assert X; /
 }while(0)

////////////////////////////////////////////////////////////
#ifdef CSS_NLOGGING
#define CSS_RETURN(Y) do{ return (Y); }while(0)
#define CSS_DEBUG(X) do{}while(0)
#define CSS_ERROR(X) do{}while(0)
#define CSS_ERROR_RETURN(X, Y) do{ return (Y); }while(0)
#else
#define CSS_RETURN(Y) /
 do { /
    return (Y); /
 }while(0)

#define CSS_DEBUG(X) /
 do { /
 CSS_Logger::GetInstance()->WriteDebugLogger X;  /
 }while(0)

#define CSS_ERROR(X) /
 do { /
    CSS_Logger::GetInstance()->WriteErrorLogger X;  /
 }while(0)

#define CSS_ERROR_RETURN(X, Y) /
 do { /
 CSS_Logger::GetInstance()->WriteErrorLogger X;  /
 return (Y); /
 }while(0)
#endif


////////////////////////////////////////////////////////////

class CSS_UTILITY_EXPORTS CSS_Logger
{
public:
 CSS_Logger(void);

 ~CSS_Logger(void) ;

public:
 static CSS_Logger* GetInstance();

public:
 bool WriteErrorLogger(const char* e, ...);

 bool WriteDebugLogger(const char* d, ...);

private:
 bool WriteLogger(const std::string& log);

private:
 static CSS_Logger *mInstance;
};

原创粉丝点击