我该如何处理访问冲突在Visual Studio C ++?(How can I handle an

2019-07-19 00:34发布

通常访问冲突终止程序,并使用我不能赶上一个Win32异常trycatch 。 有没有一种方法,我可以让我的程序运行,即使在访问冲突的情况下? 最好我想处理异常,并显示到发生访问冲突的用户。

编辑:我想我的程序要真正强大的,甚至对编程错误。 事情我真的想避免的是,即使在一些损坏状态的成本程序终止。

Answer 1:

在Windows中,这就是所谓的结构化异常处理(SEH)。 有关详细信息,请参见这里:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms680657%28v=vs.85%29.aspx

实际上,你可以注册得到一个回调时发生异常。 你不能做到这一点每个异常的原因很明显。

使用SEH,你可以检测到大量的异常,访问冲突包括在内,但不是所有的(例如,双堆栈错误)。 即使是检测到异常,也没有办法,确保异常后100%的稳定性。 然而,这可能足以通知用户,记录错误,将消息发送回服务器,和正常退出。



Answer 2:

我会说,你的问题包含一个矛盾的开始:

编辑:我想我的程序,真正做到稳健,......事情我真的想避免的是,即使在一些损坏状态的成本程序终止。

在损坏的状态的情况下,对limpin'保持的程序是不稳健,这是一个责任。


其次,各种各样的意见。 关于:

编辑:我想我的程序要真正强大的,甚至对编程错误。 ...

当通过编程错误,你的意思是所有的错误,那么这是不可能的。

如果通过编程错误 ,你的意思是:“程序员误用一些API和我想的错误信息,而不是崩溃,然后写与内置的双检查所有代码:例如,经常检查所有指针使用前NULL,即使”他们不能NULL,如果程序员不犯错误”,等等。(呵呵,你也可以考虑使用C ++ ;-)

但恕我直言,一定量的程序崩溃 - 无事,什么都会有错误的任何C ++应用程序被接受。 (除非是微不足道的,或者你测试地狱它用于军事或医疗用途(即使这样......)。)


其他已经提到的SEH -这是一个“简单”的事情__try / __catch

也许的,而不是试图赶上程序中的错误,你也可以成为朋友的Windows错误报告(WER) -我从来不拉这个,但据我了解,你完全可以通过自定义OutOfProcessException... 回调功能 。



文章来源: How can I handle an access violation in Visual Studio C++?