winapi - AddVectoredExceptionHandler 是 SetUnhandledExceptionFilter 的替代品吗?

标签 winapi exception-handling seh

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

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

我错过了什么吗?

最佳答案

好评论:

It is not [a replacement], the callback doesn't promise anything about the exception getting handled. That happens later. It is, at best, useful as a diagnostic tool to troubleshoot problems with a program that contains too many try/catch-em-all statements. Compare to the .NET AppDomain.FirstChanceException event, the kind of feature that requires AVEH.



— 汉斯·帕桑特

话虽如此 - 在重新阅读文档后我确实同意 - 我认为“困惑”,如果你愿意的话,在 original question 中我链接到,可能源于最初提出的问题

it should catch & properly handle all access violation exceptions which occur in the process



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

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

或者,换句话说,向量异常处理程序 不捕获异常 ,如果您在 catch 的意义上解释“捕获”异常和 __except 在更高级别捕获引发的异常。

VectoredHandler 仅支持 EXCEPTION_CONTINUE_SEARCH : 找到一个处理程序和 EXCEPTION_CONTINUE_EXECUTION : 使用我从来没有完全掌握。

关于winapi - AddVectoredExceptionHandler 是 SetUnhandledExceptionFilter 的替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28629351/

相关文章:

c - 使用 Windows SEH 和 GCC 标签即值跳转到本地错误处理程序

c++ - SEH StackOverflow 异常 - 真的无法捕获吗?

.net - 检测 404 而不捕获异常

ios - EXC_BAD_ACCESS 自动处理

c# - Web API 2 OData错误消息作为XML返回

c# - 扩展 Win 7 (Aero) 绘制其默认窗口和控件的方式

exception - 这个汇编代码如何设置 SEH?

c - 串行端口 : Read data problem with loopback, 未读取任何内容

.net - 代码页 ID 到代码页名称 : GetEncoding equivalent in Delphi?

c++ - 如何从powerbuilder11.5调用win32 dll?