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