这太疯狂了。它开始在我的主项目中发生,所以我创建了一个小的示例全新项目来重现它,果然..它不会发生在我创建的只是一个 Win32 控制台应用程序的示例项目中。
如果这很重要,我正在 Win7x64 上运行它。VS2008 SP1。
开始。我创建了一个带有按钮的小对话框应用程序。在该按钮的处理函数中放置一个断点。按钮处理函数如下所示:
void CTestProjectDlg::OnBnClickedButton1()
{
int i;
i = 2; // < breakpoint here
i = 3;
}
点击按钮,点击断点。F10 步进,然后繁荣:“TestProject.exe 中 0x0398f77b 的第一次机会异常:0xC0000005:访问冲突。”
它让我可以选择中断或继续。如果我继续,它只是再次击中它,而不是“第一次机会”。是的,我在 Debug->Exceptions dlg 中检查了该异常。
如果我中断,调用堆栈只会显示断点所在的行。如果我再次F10 .. 我再次遇到异常,现在调用堆栈在 _AfxDispatchCmdMsg() 函数中显示我,而我原来的 OnBnClickedButton1() 不再在调用堆栈中。
我把断点放在哪里并不重要。
如果我不按 F10,而是继续按 F5,则它可以正常工作。
现在..如果我构建一个发布版本并在调试模式下运行:我打断点,所有的指针,变量值看起来都很正常。F10,这些变成垃圾。this 指针现在为零。m_csHello 现在是
但是,在 Release 模式下,没有捕获到异常,并且一切运行良好。“hello World”字符串按原样显示在对话框中。
我已经询问过 IT 部门在过去一两天内是否在我的盒子上安装了一些补丁。这不是在 2 天前发生的。
你怎么看?VS2008是否损坏?
谢谢。
编辑:附加信息。如果我构建/调试 x64 平台,则不会发生这种情况。仅适用于 Win32。
我还查看了包装盒上 VS2008 的所有修补程序/安全更新。他们是
最后,我将项目放在了过去 2-3 周没有更新的另一台机器上。它可以在那里找到,并且安装了这些相同的 VS 更新。
为了这篇文章的目的,我还更改了正在逐步执行的代码。.. 这是一个简单的整数赋值,不涉及 MFC。
目前我正在重新安装VS2008。