我想让我的代码为未处理的异常创建转储。 我想过使用SetUnhandledExceptionFilter。但是SetUnhandledExceptionFilter可能无法按预期工作的情况是什么。例如,当堆栈上发生缓冲区溢出时,堆栈损坏问题怎么办? 在这种情况下会发生什么?有没有其他解决方案可以随时使用?
答案 0 :(得分:1)
我一直在使用 SetUnhandledExceptionFilter 很长一段时间,并没有发现任何未正确捕获的崩溃/问题。并且,如果代码中的某处未处理异常,则应由过滤器处理。来自MSDN关于过滤器...
调用此函数后,如果进程中发生异常 没有被调试,异常使它成为未处理的 异常过滤器,该过滤器将调用异常过滤器函数 由lpTopLevelExceptionFilter参数指定。
没有提及上述内容仅适用于某些类型的例外情况。
我不使用过滤器来创建转储文件,因为应用程序使用Microsoft WER系统来报告崩溃。相反,过滤器用于提供收集两个附加文件的机会,以附加到Microsoft将收集的崩溃报告(和转储文件)。
以下是Microsoft的崩溃报告仪表板示例,其中包含已编辑模块名称的应用程序。
您会看到收集了大量的崩溃类型,包括堆栈缓冲区溢出。