我在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