与C++异常不同,访问冲突表示应用程序运行时受到威胁,因此应用程序的状态未定义。在这种情况下,最好的做法是退出你的应用程序(通常是为你做的,因为它崩溃了)。
我注意到捕获这些异常之一是可能的。例如,在Microsoft Visual C++中,您可以使用/EHa或__try/__catch来执行此操作。
那么,你想要抓住它们的原因是什么呢?据我所知,你的应用程序是无法恢复的。
发布于 2012-06-20 04:58:41
一个原因可能是编写一个崩溃转储文件;您可以对其进行更多的控制,并能够编写所需的确切类型。例如,在Windows中,您可以调用MiniDumpWriteDump来执行此操作。
发布于 2012-06-20 04:58:59
您可以从访问冲突中恢复。
例如,您可以使用VirtualAlloc分配一些地址空间,但将它所指向的内存标记为不存在,从而创建动态数组。然后,当您尝试使用某些内存时,您会捕获访问冲突,映射发生访问的内存页面,然后重试导致冲突的指令。
发布于 2012-06-20 05:25:37
在所有访问冲突之后,不能保证您的应用程序是稳定的。但它可以是稳定的,也可以在一段时间后恢复,因此捕获访问冲突将使您有机会:
一个典型的例子是从插件捕获异常的主机应用程序。这样,主机应用程序(例如Photoshop )可以告诉用户"Plugin X崩溃,Photoshop不稳定……您应该保存您的工作,然后重新启动Photoshop。“
请注意,这不同于C++异常处理,后者根本不指示不可恢复的错误,而更像是堆栈展开功能。
https://stackoverflow.com/questions/11109304
复制相似问题