Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows中绘制事件中的异常和访问冲突 执行一些新代码后,我的C++应用程序开始表现奇怪(不正确或不完整的屏幕更新,有时根本没有屏幕更新)。 过了一会儿,我们发现新代码导致访问冲突。奇怪的是,应用程序只是继续运行(但屏幕更新不正确)_C++_Windows_Exception Handling_Access Violation_Onpaint - Fatal编程技术网

Windows中绘制事件中的异常和访问冲突 执行一些新代码后,我的C++应用程序开始表现奇怪(不正确或不完整的屏幕更新,有时根本没有屏幕更新)。 过了一会儿,我们发现新代码导致访问冲突。奇怪的是,应用程序只是继续运行(但屏幕更新不正确)

Windows中绘制事件中的异常和访问冲突 执行一些新代码后,我的C++应用程序开始表现奇怪(不正确或不完整的屏幕更新,有时根本没有屏幕更新)。 过了一会儿,我们发现新代码导致访问冲突。奇怪的是,应用程序只是继续运行(但屏幕更新不正确),c++,windows,exception-handling,access-violation,onpaint,C++,Windows,Exception Handling,Access Violation,Onpaint,起初,我们认为问题是由“try-catch(…)”构造(由一位过度活跃的前同事放在那里)引起的,但几个小时后(仔细检查调用堆栈,添加许多断点,…)我们发现,如果绘画事件中存在访问冲突,Windows会捕获它,然后继续运行应用程序 这是正常的行为吗 Windows在绘制事件期间捕获异常/错误是否正常 有没有办法禁用此功能?(如果不是,这意味着在测试代码时,我们必须始终在调试器中运行,并启用所有异常) 编辑: 在XP上,正确的崩溃(访问冲突后想要的行为) 在Vista和Windows 7上,应

起初,我们认为问题是由“try-catch(…)”构造(由一位过度活跃的前同事放在那里)引起的,但几个小时后(仔细检查调用堆栈,添加许多断点,…)我们发现,如果绘画事件中存在访问冲突,Windows会捕获它,然后继续运行应用程序

  • 这是正常的行为吗
  • Windows在绘制事件期间捕获异常/错误是否正常
  • 有没有办法禁用此功能?(如果不是,这意味着在测试代码时,我们必须始终在调试器中运行,并启用所有异常)
编辑:

  • 在XP上,正确的崩溃(访问冲突后想要的行为)
  • 在Vista和Windows 7上,应用程序将继续运行

    • 我的直接反应是,这听起来像是资源泄漏,当您不再拥有正确类型的可用资源时,就会发生故障

      [我删除了前面答案的其余部分,因为根据Patrick的评论和一点调查,它显然不适用于手头的问题。]

      根据Patrick的评论,我做了一个快速测试,并在Windows7下复制了该行为。我从一个真正最小的程序(VS2008为Win32项目生成的基本程序)开始,只添加了对不存在的地址的写入。果不其然,你一点也没有看到任何不好的事情发生的迹象

      只是为了咧嘴一笑,我做了一个快速测试,看看它对异常的反应。值得一提的是,它不会在异常之后恢复,它只是捕获异常并跳过WM_PAINT处理程序中的其余代码


      我在MSDN中做了一些查找,但到目前为止还没有找到任何文档来解释这是如何或为什么发生的,它是否可以被禁用,如果可以,如何禁用,或者其他很多内容。不过我必须同意:这确实是一个严重的问题——如果我造成了访问违规(不,不可能发生!),我希望程序尽快彻底崩溃。掩盖一个bug(特别是像访问违规一样严重的bug)是一个非常糟糕的主意

      这是一个已知的缺陷。检查修补程序

      不正确的更新不是问题所在,WM_PAINT消息中出现访问冲突后应用程序继续运行的事实是(至少在Vista上)不,程序不会停止!我们尝试了与您评论中完全相同的代码(除了使用123而不是1:-):在XP上它崩溃了,在Vista上它没有崩溃。Jerry,很高兴我们同意这一点,+1。与此同时,我发现了一个相同的问题()。不幸的是,还没有好的答案。我目前正在研究使用VectoredExceptionHandling来解决这个问题。事实上,可能是它的重复。我们将进一步调查这一点,看看如何正确解决这一问题。谢谢你的提示。