2007年4月19日

Release下调试心得

上周末做的这样一次调试,不过最终并没有找到那个诡异的bug
还是明白了一些事情,首先感谢joehust,让我知道,release下调试时IDE给的变量值并不可靠.
最可靠的办法是写一个Logger.
开始看到调试时变量的值跟我预想的完全不一样让我很奇怪.由于代码优化,很多变量的内容观察不到,行的运行顺序也跟想象的不一样,很多行由于被优化掉无法设置断点.
能相信的就只有这么一个Loggor,把变量的内容输到Logger中记录下来.
简单的Logger实现


class Logger
{
public:
template < T value >
Logger& operator <<(T value)
{
std::stringstream ss;
ss << value;
buffer_.append( ss.str() );
buffer_.push_back('\n');
return *this;
}

void Out(const char *file)
{
std::ofstream fileStream;
fileStream.open(file, std::ios::ios_base::app);
fileStream << buffer_;
fileStream.close();
}

void Print()
{
std::cout << buffer_;
}
private:
std::string buffer_;
};

主要是利用stringstream吧一些常用的类型(int,char,float,double等)转换为字符串

2 条评论:

Unknown 说...

不错,项目里用到这个类没有?

yaker 说...

没,但是调试的时候用到了
这个类很简单的...