6

一些资源似乎建议不要使用SetUnhandledExceptionFilter捕获未处理的异常,而是可以使用AddVectoredExceptionHandler通知所有异常。

但是,据我所知,在确定是否或在何处处理异常之前, “只是”为程序中引发的每个(SEH)异常调用向量处理程序。

我错过了什么吗?

4

1 回答 1

2

好评论:

它不是[替代],回调不承诺任何有关异常处理的内容。那会在以后发生。充其量,它可以作为诊断工具来解决包含太多 try/catch-em-all 语句的程序问题。与 .NET AppDomain.FirstChanceException 事件相比,这种事件需要 AVEH。

——汉斯·帕桑特


话虽如此 - 在重新阅读我同意的文档之后 - 我认为“混乱”,如果你愿意的话,在我链接到的原始问题中,可能源于原来的问题

它应该捕获并正确处理过程中发生的所有访问冲突异常

当然,您可以使用向量异常处理程序,也就是说,您可以通过 VEH拦截所有内容0xC0000005,但是您不知道围绕此的代码是否真的可以捕获并处理它——并且,在低级别或对于特定情况,捕获访问冲突并在捕获站点继续是一种有效的方法。

因此,正如汉斯所说,它充其量只是作为一种诊断工具有用

或者,换一种说法,向量异常处理程序不会捕获异常,如果您从某种意义上解释“捕获”异常catch__except在更高级别捕获引发的异常。

唯一的VectoredHandler支持EXCEPTION_CONTINUE_SEARCH:find a handler 和EXCEPTION_CONTINUE_EXECUTION:我从来没有掌握过的使用方法。

于 2015-02-21T13:48:40.120 回答