有些情況下,Debug版的程序運(yùn)行的正常,可是用Release版就出問題了,網(wǎng)上有很多解決辦法。最近,我不幸也遇到了這種情況,不過解決方法卻很簡單——更改編譯選項(xiàng)。
VC6 Release版下的Optimizations選項(xiàng)默認(rèn)是Maximize Speed。至于vc是如何優(yōu)化的那是它的事情,我是不知道。但可以觀察到優(yōu)化的結(jié)果。為了跟蹤release下的出事地點(diǎn),臨時(shí)啟用Release下的Generate debug info項(xiàng),進(jìn)行調(diào)試。在函數(shù)調(diào)用堆棧中,發(fā)現(xiàn)少調(diào)用了一個(gè)函數(shù)——一個(gè)inline函數(shù),被VC優(yōu)化掉了?于是,把Optimizations選項(xiàng)設(shè)置為Disable。再運(yùn)行,一切OK。
有一個(gè)Singleton類:
class COperatorManager
{
public:
void SetOperator(UINT nOpID);
static COperatorManager& Instance(void)
{
static COperatorManager s_Instance;
return s_Instance;
}
// 其余省略
};
出事地點(diǎn):
COperatorManager::Instance().SetOperator(id);
release下該句的調(diào)用堆棧:
COperatorManager::SetOperator(id); // 出錯(cuò)。
這樣使用Singleton在VC6 Release版本下并不是總會(huì)出現(xiàn)問題。而我是恰巧遇上了,又恰巧解決了。故在此記錄一下:
Debug版的程序運(yùn)行的正常,可是用Release版就出問題,此時(shí)把Relase版的把Optimizations選項(xiàng)設(shè)置為Disable再試一下看問題是否解決。