何时SetUnhandledExceptionFilter不起作用?例如堆栈腐败?

时间:2015-03-26 09:13:33

标签: exception-handling crash crash-reports crash-dumps

我想让我的代码为未处理的异常创建转储。 我想过使用SetUnhandledExceptionFilter。但是SetUnhandledExceptionFilter可能无法按预期工作的情况是什么。例如,当堆栈上发生缓冲区溢出时,堆栈损坏问题怎么办? 在这种情况下会发生什么?有没有其他解决方案可以随时使用?

1 个答案:

答案 0 :(得分:1)

我一直在使用 SetUnhandledExceptionFilter 很长一段时间,并没有发现任何未正确捕获的崩溃/问题。并且,如果代码中的某处未处理异常,则应由过滤器处理。来自MSDN关于过滤器...

  

调用此函数后,如果进程中发生异常   没有被调试,异常使它成为未处理的   异常过滤器,该过滤器将调用异常过滤器函数   由lpTopLevelExceptionFilter参数指定。

没有提及上述内容仅适用于某些类型的例外情况。

我不使用过滤器来创建转储文件,因为应用程序使用Microsoft WER系统来报告崩溃。相反,过滤器用于提供收集两个附加文件的机会,以附加到Microsoft将收集的崩溃报告(和转储文件)。

以下是Microsoft的崩溃报告仪表板示例,其中包含已编辑模块名称的应用程序。

enter image description here

您会看到收集了大量的崩溃类型,包括堆栈缓冲区溢出。