我最近用8.1替换了我的Windows 7,并重新安装了适用于Windows桌面的VS Express 2013。我在正在进行的项目中遇到了一些奇怪的行为,并一直试图找到根本原因。
首先,调试器行为似乎很奇怪。每当我运行一个控制台程序时,它似乎在两个不同的控制台窗口中运行两次,其中一个窗口在第一次运行完成后立即生成。起初,我认为这只是将输出复制到两个窗口的情况,但根据进一步的测试(参见下面的文件编写示例),该程序的一个版本实际上是在另一个版本之前运行。甚至更奇怪的是,断点在第一次“通过”中似乎没有起作用。
最小例子:
#include <iostream>
using namespace std;
int main()
{
cout << "test1" << endl; // breakpoint here
cout << "test2" << endl;
return 0;
}
当程序从具有默认设置的其他空VS项目运行时,在第一个控制台窗口中,我看到两个测试行。然后,在第二个窗口产生后不久,我在那里看到第一行(如预期的那样),而执行在断点处停止。
如果我从Windows命令提示符运行程序,首先控制台窗口会在几分之一秒内生成另一个控制台并在那里输出两行,然后在其他窗口关闭之后,可能会暂停一秒钟,之后其中两行都输出到启动程序的控制台。
即使简单的couts被“写入文件”和“打印文件的内容”替换,也会出现同样的现象。在第一次传递期间,要写入的内容正确地打印到控制台,即使从Windows资源管理器中看到的文件永远不会创建,并且在第一次传递期间断点也不会执行任何操作。在第二次传递期间,一切都按预期工作:断点工作,文件创建,输出正确。
在任何阶段都没有警告或错误消息。
我想知道这是否与Windows 8.1有关。我通过谷歌找到的唯一有希望的打击与Windows Phone应用程序做了一些模糊相似的事情。这个问题非常令人困惑,我认为这与我更复杂的项目中的类似奇怪行为有关。我希望有人能理解我想要解释的内容。任何帮助都非常受欢迎,因为我不知道如何继续,或使用什么搜索条件。