通常,访问冲突会终止程序,我无法使用try
和catch
捕获Win32异常。有没有办法让我的程序保持运行,即使是在访问冲突的情况下?最好我想处理异常并向用户显示发生的访问冲突。
编辑:我希望我的程序非常强大,甚至可以防止编程错误。我真正想要避免的是程序终止,即使以一些损坏的状态为代价。
答案 0 :(得分:4)
在Windows中,这称为结构化异常处理(SEH)。有关详细信息,请参见此处:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680657%28v=vs.85%29.aspx
实际上,您可以注册以在发生异常时获得回调。出于显而易见的原因,你不能对每个例外都这样做。
使用SEH,您可以检测到许多异常,包括访问冲突,但不是全部(例如双堆栈错误)。即使有可检测的异常,也无法确保异常后的100%稳定性。但是,通知用户,记录错误,将消息发送回服务器并正常退出可能就足够了。
答案 1 :(得分:3)
首先,我要说你的问题包含一个矛盾:
编辑:我希望我的程序非常强大,...我真正想要避免的是程序终止,即使以某些损坏的状态为代价。
在状态损坏的情况下保持limpin的程序不健全,这是一种责任。
第二,各种意见。关于:
编辑:我希望我的程序非常强大,甚至可以防止编程错误。 ...
当编程错误表示所有错误时,这是不可能的。
如果通过编程错误,你的意思是:“程序员滥用了一些API,我想要错误消息而不是崩溃,然后用内置的双重检查编写所有代码:例如,总是检查所有指针使用前为NULL,即使“如果程序员没有出错也不能为NULL”等等(哦,你也可以考虑不使用C ++; - )
但恕我直言,一些程序崩溃 - 无关紧要 - 在任何C ++应用程序中都必须接受哪些错误。 (除非它是微不足道的,或者你为了军事或医疗用途而测试它的地狱(即使那时......)。)
其他人已经提到SEH - 这是__try / __catch
的“简单”问题。
也许不是试图捕捉程序中的错误,你可以尝试成为Windows Error Reporting (WER)的朋友 - 我从来没有拉过这个,但据我所知,你可以通过{{1完全自定义它}} callback functions。