AddVectoredExceptionHandler是SetUnhandledExceptionFilter的替代吗?

时间:2015-02-20 12:46:04

标签: winapi exception-handling seh

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

但是,据我所知,vectored handler只是"只是"要求在程序中引发的每个(SEH)异常之前以确定是否或将在何处处理异常。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

好评:

  

它不是[替代],回调并不承诺处理异常。这发生在以后。它充其量只是一个有用的诊断工具来解决包含太多try / catch-em-all语句的程序的问题。与.NET AppDomain.FirstChanceException事件相比,这是一种需要AVEH的功能。

- Hans Passant


话虽如此 - 在重新阅读文档之后我确实同意 - 我认为,如果你愿意的话,在我链接的original question中,可能源于原版提出的问题

  

它应该赶上&正确处理流程中发生的所有访问冲突异常

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

因此,正如汉斯所说,它至多是,可用作诊断工具

或者,换句话说,如果你解释"捕捉"一个向量异常处理程序不会捕获异常catch__except在更高级别捕获引发异常的意义上的异常。

VectoredHandler仅支持EXCEPTION_CONTINUE_SEARCH:找到一个处理程序和EXCEPTION_CONTINUE_EXECUTION:我从未完全掌握的用法。