Some resources似乎建议不要使用SetUnhandledExceptionFilter
来捕获未处理的异常,而是可以使用AddVectoredExceptionHandler
通知所有异常。
但是,据我所知,vectored handler只是"只是"要求在程序中引发的每个(SEH)异常之前以确定是否或将在何处处理异常。
我错过了什么吗?
答案 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
:我从未完全掌握的用法。