【问题标题】:Is AddVectoredExceptionHandler a replacement for SetUnhandledExceptionFilter?AddVectoredExceptionHandler 是 SetUnhandledExceptionFilter 的替代品吗?
【发布时间】:2015-02-20 12:46:03
【问题描述】:

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

然而,据我所知,vectored handler 是“只是”为程序中引发的每一个 (SEH) 异常调用,先于确定是否或在何处处理异常。

我错过了什么吗?

【问题讨论】:

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

标签: winapi exception-handling seh


【解决方案1】:

好评:

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

– 汉斯·帕桑特


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

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

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

所以,正如 Hans 所说,它充其量只是一种诊断工具

或者,换一种说法,向量异常处理程序不会捕获异常,如果您将“捕获”异常解释为 catch__except 在更高级别。

VectoredHandler只支持EXCEPTION_CONTINUE_SEARCH:找个handler和EXCEPTION_CONTINUE_EXECUTION:用法我一直没搞懂。

【讨论】:

  • EXCEPTION_CONTINUE_EXCEPTION 用于识别异常,更改导致问题的原因,然后继续执行的情况。听起来很不寻常,但有其有效用途。
猜你喜欢
  • 2011-03-17
  • 2013-11-08
  • 2010-11-17
  • 2013-09-09
  • 2011-03-29
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多