我在Visual Studio 2010 v10.0.40219.1 SP1Rel下有一個很大的C++項目,我開始在我們的迴歸測試中看到一個bug。當我檢查開發機器上的錯誤時,我無法實現它,所以我將exes從測試機器複製到開發機器,並出現錯誤。然後我刪除了源代碼樹,包括來自測試機器的項目,從開發機器複製它們,清理並重建它們在測試機器上,並且錯誤仍然存在。所以基本上,使用相同的編譯器版本和安裝的修補程序構建的開發PC上的相同項目和配置的可執行文件與構建在測試PC上的可執行文件不同。唯一的區別是dev電腦運行的是Windows 7 64,而測試電腦運行的是XP。我還檢查了所有鏈接的LIB和DLL在兩個構建平臺上都是相同的。VS2010在不同平臺上生成的可執行文件有何區別?
如果相同的可執行文件在不同的PC上產生不同的結果,我想這是我的代碼中某種平臺特定的錯誤,但是相同的可執行文件在不同的PC上表現一致,只是那些在XP上編譯的行爲表現不同到那些在W7上編譯的64.
任何想法,爲什麼這應該是?
編輯在測試機器上的調試配置中重新構建代碼,並且錯誤消失。目前將源代碼樹和工具複製到空白的XP和W7中,查看問題確實遵循構建平臺,還是特定於當前正在使用的其中一臺PC。
編輯2將源代碼樹複製到兩臺新PC上,一臺XP,一臺Windows7並重建。只有在XP版本上構建時,exe纔會出現bug。不會在XP調試版本上發生,只會優化發行版本。 Win 7 build在XP和Win 7上運行良好,XP build顯示XP和Win 7上的bug。爲了更好地隔離錯誤以找出究竟發生了什麼,但似乎存在編譯差異基於構建平臺。
Edit3問題確實是一個未初始化的變量,或者更確切地說是一個模板中未初始化的結構,
template<class TYPE>class MyTemplateClass
{
public:
assign(TYPE &x) { x = t; }
TYPE t;
}
警告級別4似乎沒有選擇它。
是靜態鏈接MFC,還有Stingray GUI庫。有一些第三方庫和DLL,但它們在兩個平臺上都是相同的版本。我打算在測試PC上調查問題,看看我能否確定究竟發生了什麼。這是一個問題,因爲我們通常基於測試PC版本構建發佈版。 –
對不起,我抽出了這個問題,因爲我重讀了這個問題,並且看到它已經回答了。 – OmnipotentEntity
有幾種可能性,我認爲它不像32位和64位問題那樣明顯,尤其是因爲您可能正在編譯W7 64上的32位可執行文件以用於XP盒。它可能是MFC的不同版本,甚至更奇怪。你有一個最小的測試用例嗎? – OmnipotentEntity