我在Visual Studio 2015社区(更新3)中创建了一个解决方案,其中包含两个项目。每个项目都将此代码放在名为tiny.cpp的文件中:
#include "stdafx.h"
int tiny()
{
return 0;
}
Project1.cpp中的主程序是:
#include "stdafx.h"
extern int tiny();
int main()
{
tiny();
return 0;
}
如果我在return
中的tiny
语句处设置断点,则调试器会正确捕获它并在IDE中显示代码。但是,如果我在同一个解决方案中创建第二个项目,使用名为tiny.cpp的相同文件,以及名为Project2.cpp的文件,其代码与Project1.cpp中的代码相同,并在调试器中启动该项目,如果在第二个项目中的任何一个文件中都没有设置断点,则调试器的行为就像在第一个项目的tiny
函数中设置的断点在第二个项目中设置的那样tiny
功能。
如果在第二个项目中我在}
tiny
设置了一个断点并在调试器中启动了第二个项目,那么两个断点都显示调试器捕获的时间其中一个是第一个项目的tiny.cpp副本,另一个来自第二个项目的tiny.cpp副本。
有趣的是,如果对 版本的tiny.cpp进行任何更改,行为就会消失,即使只是在一行的末尾添加注释(所以行号甚至不变)。更有趣的是,对两个版本进行相同更改(因此它们与更改之前不同,但在更改后保持相同)不使行为成为可能走开。
今天早上,当我将一堆源文件从一个项目复制到另一个项目时,这对我起了作用。来自原件的断点继续影响副本,让我想起了一段时间,我仍在运行旧代码,而不是复制版本。
谁能告诉我为什么VS2015会出现这种行为?它有什么用处吗?
这是我尝试上传到微软的截图,但他们的上传器似乎无法正常工作: