有些情况下,Debug版的程序运行的正常,可是用Release版就出问题了,网上有很多解决办法。最近,我不幸也遇到了这种情况,不过解决方法却很简单——更改编译选项。
VC6 Release版下的Optimizations选项默认是Maximize Speed。至于vc是如何优化的那是它的事情,我是不知道。但可以观察到优化的结果。为了跟踪release下的出事地点,临时启用Release下的Generate debug info项,进行调试。在函数调用堆栈中,发现少调用了一个函数——一个inline函数,被VC优化掉了?于是,把Optimizations选项设置为Disable。再运行,一切OK。
有一个Singleton类:
class COperatorManager
{
public:
void SetOperator(UINT nOpID);
static COperatorManager& Instance(void)
{
static COperatorManager s_Instance;
return s_Instance;
}
// 其余省略
};
出事地点:
COperatorManager::Instance().SetOperator(id);
release下该句的调用堆栈:
COperatorManager::SetOperator(id); // 出错。
这样使用Singleton在VC6 Release版本下并不是总会出现问题。而我是恰巧遇上了,又恰巧解决了。故在此记录一下:
Debug版的程序运行的正常,可是用Release版就出问题,此时把Relase版的把Optimizations选项设置为Disable再试一下看问题是否解决。