仅在单步执行调试模式时,VS2008 C++ MFC访问冲突

Hot*_*Oil 5 debugging mfc access-violation visual-studio-2008

这太疯狂了.它开始在我的主项目中发生,所以我创建了一个小样本全新的项目来重现它,当然,它确实不会发生在我创建的只是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.

小智 7

与VS2008 SP1,Win7x64,32位调试代码有同样的问题.如果我关闭选项,问题就会消失

工具 - >选项 - >调试 - >本机 - >启用RPC调试.

以下条目可能与此相关: 调试命令(跳过/跳入)会导致未处理的异常


Qwe*_*tie 1

您说同一个项目在具有相同版本的 Visual Studio 的不同计算机上编译和运行得很好。代码看起来不错,所以是的,听起来 VS 2008 已损坏,需要重新安装。