2013-12-20 26 views
4

我在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似乎沒有選擇它。

+0

是靜態鏈接MFC,還有Stingray GUI庫。有一些第三方庫和DLL,但它們在兩個平臺上都是相同的版本。我打算在測試PC上調查問題,看看我能否確定究竟發生了什麼。這是一個問題,因爲我們通常基於測試PC版本構建發佈版。 –

+0

對不起,我抽出了這個問題,因爲我重讀了這個問題,並且看到它已經回答了。 – OmnipotentEntity

+0

有幾種可能性,我認爲它不像32位和64位問題那樣明顯,尤其是因爲您可能正在編譯W7 64上的32位可執行文件以用於XP盒。它可能是MFC的不同版本,甚至更奇怪。你有一個最小的測試用例嗎? – OmnipotentEntity

回答

1

您比較了二進制可執行文件嗎?這可以通過命令行fc /b file1 file2see here)完成。這至少會驗證你是否製作了相同的程序,並且沒有遇到可執行程序以外的奇怪事情。

可能有/正在編譯一些靜態庫,並且可能還有其他.h文件不屬於您的代碼。這些錯誤總是有可能的。確保你的庫和SDK是相同的版本,而不僅僅是編譯器。如果可能,請嘗試更新它們。

如果錯誤使用不同的編譯器標誌消失,那麼程序工作/失敗可能是某些未定義行爲(例如未初始化的變量)的結果。確保所有編譯器的警告標誌都已啓用以幫助查找這些標誌。不幸的是,Visual Studio並不是最好的錯誤和警告消息,但它們仍然有幫助。

+0

二進制文件是不同的,在一個15MB的exe文件上,XP上生成的二進制文件大約500個字節,並且從偏移量x128開始,FC發出大量的差異。 –

+0

所有編譯器設置應該相同,因爲正在使用相同的項目文件。頭部也應該與我昨天在空白的XP和WIN7盒子上完整安裝整個工具鏈一樣,並得到相同的結果。我會對exes進行依賴檢查,看看顯示的是什麼。 –

+0

這兩個版本的靜態依賴性步驟給出了相同的結果,但表示'至少有一個延遲 - 加載依賴項模塊未找到','至少有一個模塊由於延遲加載相關模塊中缺少導出函數而導入了未解析的導入。 「我會嘗試一個異形的動態漫步。 –

相關問題