【问题标题】:when will SetUnhandledExceptionFilter not work? e.g. stack corruptions?SetUnhandledExceptionFilter 什么时候不起作用?例如堆栈损坏?
【发布时间】:2015-03-26 09:13:33
【问题描述】:
我想让我的代码为未处理的异常创建转储。
我曾想过使用 SetUnhandledExceptionFilter。但是 SetUnhandledExceptionFilter 可能无法按预期工作的情况是什么。例如,当堆栈上发生缓冲区溢出时,堆栈损坏问题怎么办?
在这种情况下会发生什么?是否有任何其他解决方案始终有效?
【问题讨论】:
标签:
exception-handling
crash
crash-reports
crash-dumps
【解决方案1】:
我使用 SetUnhandledExceptionFilter 已经有一段时间了,并没有注意到任何未正确捕获的崩溃/问题。而且,如果在代码中的某个地方没有处理异常,它应该由过滤器处理。来自MSDN 关于过滤器...
调用该函数后,如果进程发生异常
没有被调试,并且异常使其未处理
异常过滤器,该过滤器将调用异常过滤器函数
由 lpTopLevelExceptionFilter 参数指定。
没有提到上述内容仅适用于某些类型的异常。
我不使用过滤器来创建转储文件,因为应用程序使用 Microsoft WER 系统报告崩溃。相反,过滤器用于提供一个机会来收集两个附加文件,以附加到 Microsoft 将收集的崩溃报告(和转储文件)。
这是 Microsoft 的应用程序崩溃报告仪表板示例,其中模块名称已编辑。
您会看到收集的崩溃类型范围很广,包括堆栈缓冲区溢出。