在開發32位Windows命令行程序時,我們最近遇到調試版本按預期工作的情況,而發行版本在其計算中顯示出奇怪的行爲不。現在,這在20多年前並不罕見。對於發佈版本,編譯器優化會打開,即使現在編譯器優化也不一定適用於所有情況。所以,在過去,如果我們遇到了這個問題,我們會關閉編譯器優化 - 如果速度或空間考慮非常重要,可能會選擇關閉。這次我們關閉了所有優化,問題依然存在!調試版本和發行版本之間的唯一區別在於一系列的編譯器和加載程序設置。我們回去修改版本設置,儘可能匹配調試設置,問題仍然存在!那我們以前從未見過。MS Visual C++發行版和調試版本之間不同行爲的可能原因
這一切都在我們通常用於32位Windows的VC6平臺上。這是正確的Microsoft Visual C++ 6.0。我們對VC6的偏好是,我們是微軟在其C/C++軟件包的所有版本上通過VC6的beta測試人員,並且對優化程序的調試非常活躍。但由於我們已經沒有與VC8真正的問題,我們嘗試過。在這種情況下,我們只需將VC8轉換成我們一直使用的項目。令我們驚訝的是,我發現VC8顯示了完全相同的問題。調試版本起作用,發行版本不起作用。我們可能會嘗試在VC8中從頭開始創建這個東西,看看它是否有所作爲,但我們更懷疑它不會。在這一點上,我們完全不瞭解這一點。它必須是一個編譯器開關設置,我們缺少的地方。還是呢?
還有什麼可以導致版本和調試版本之間的差異?
如果調試和發佈版本的行爲不同,它可能是您在某處使用未初始化的內存或變量的標誌。 –
我看到VC在調試中分配一些額外的堆棧空間,而不是在釋放中。所以可能你會跳出一些綁定在一個堆棧分配的數組上,這個數組現在在發行版中出現。您可以通過檢查彙編程序來檢查。 –
@Paul Ogilvie感謝您的觀察,將看看。 –