接口和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;
};
- 接口和bug问题示例
- 多态和接口示例
- 【cocos2d-js系列问题】cocos2d HTML5和JSB接口差异,已知的兼容bug
- 关于程序BUG和问题
- perl脚本和 perl dbi接口示例
- perl脚本和 perl dbi接口示例
- perl脚本和 perl dbi接口示例
- 接口和父类的使用示例
- 接口示例
- 接口示例
- 关于调bug和问问题
- Win32和汇编接口问题
- 抽象类和接口问题
- 问题 bug
- 使用 Hashtable(哈希表)和 IEnumerator 接口 示例
- Java线程示例 - 继承Thread类和实现Runnable接口
- php中创建和调用webservice接口示例
- JDBC常用类和接口及基本操作示例
- QT 自带例程编译不成功解决办法
- 多继承一题
- 三维形体的构造及表达
- 真高兴
- 一个程序生成另一个程序
- 接口和bug问题示例
- 窗口菜单栏工具栏
- Java 清屏 DOS界面
- 在解决哈希碰撞中二次探查法模数必须是4k+3的质数的原因
- Session.Abandon (当前页面结束之后删除Session对象) Session.Clear(清理Session对象中的内容)
- 要坚持自己的选择,不要随便听信别人
- 实体建模 CSG Vs. BRep
- [每天读一点英文]Obama Radio Address on Inauguration Week January 17, 2009 gnuhpc标注版
- 体素构造表示法(CSG)