我有一个使用多个项目的visual studio解决方案。我发现在调试模式下使用VS2012进行编译/链接会产生奇怪的行为。我有一个项目'X',它有一个头文件“A.h”包含
template <class T>
double Test( const T & in) //first function
{
std::cout<<"1\n";
return 0.0;
}
template <class T>
T Test( const T & in, const bool in) //second function
{
std::cout<<"2\n";
return T(0.0);
}
void dTest(dataType in)
{
Test(in)
}
void TTest(dataType in);
和“A.cpp”
#include "A.h"
void TTest(dataType in)
{
Test (in, true);
}
然后在解决方案中我称之为TTest和dTest。
按预期打印1和2。
然后我改变代码分别打印3和4;
和build,导致A.cpp的编译。 但是当我运行它时会打印3和2。
我尝试在它到达的第一个函数中放置一个断点。 但是,如果我在第二个函数中设置了断点,调试器会抱怨“断点不会被命中。源代码版本不同”。
我无法在“发布”模式下重现此行为。进行重建会带来正确的行为。为什么我会看到这种行为?为每个项目创建了一个dll文件。它如何从当前代码和以前代码的一部分中获得部分?我正在使用TFS系统。这是否意味着,VS会保留一个与我当前文件不同的中间文件?
对问题的任何见解/解决方案(除了重建/清洁)都表示赞赏 感谢
答案 0 :(得分:2)
Visual Studio在跟踪依赖项方面做得不好。请参阅How do I make sure that when a .h file is modified, the .cc files including it are compiled automatically in a Release build using Visual Studio 2008?。
如果修改.h文件,确保更改生效的唯一安全方法是重建解决方案中的所有项目。
<强> PS 强>
根据我的经验,在调试版本中正确地选择了依赖项。问题仅出在发布版本中。