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/