有些情況下,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再試一下看問題是否解決。