【问题标题】:What exactly is "application-defined" about UnhandledExceptionFilter?UnhandledExceptionFilter 的“应用程序定义”究竟是什么?
【发布时间】:2010-08-31 17:09:37
【问题描述】:

MSDN describes UnhandledExceptionFilter 如下:“如果正在调试进程,则将未处理的异常传递给调试器的应用程序定义函数。”

但是这个函数显然是由操作系统提供的,在 kernel32.dll 中根据同一页。

那么为什么他们称它为应用程序定义的函数

【问题讨论】:

    标签: winapi seh structured-exception


    【解决方案1】:

    是的,非常尴尬的语言。它是一个函数的原型定义。您可以使用 __except 关键字或作为 SetUnhandledExceptionFilter() 的参数。要么让你的“应用程序定义的功能”。

    如果您两者都不做,则有默认处理,调试器会在未处理的异常处自动停止。我想这就是他们所说的“将异常传递给调试器”的意思。 SEH 的 SDK 文档应获得全面的不及格评分。

    【讨论】:

    • 好吧,按照我的理解,这篇文章设法将一个名为 UnhandledExceptionHandler 的 prototype 和一个名为 UnhandledExceptionHandler 的 function 记录在一个单一的地方,完全无法解释的区别。感谢您解决这个问题。
    【解决方案2】:

    UnhandledExceptionFilter() 本身不是内核提供的函数(尽管内核确实实现了自己的默认实现,直到您用自己的覆盖它之前一直使用它)。您引用的 UnhandledExceptionFilter() 文档描述了一个函数原型,如果您选择实现自己的函数并将其传递给 SetUnhandledExceptionFilter() 函数以在内核中激活它,则必须遵循该原型。

    【讨论】:

    • 嗯,你说的方式似乎同样具有误导性。如果它不是它自己的函数,为什么它会在我的 WinDbg 堆栈跟踪中显示为KERNEL32!UnhandledExceptionFilter
    • (但这是一个修辞问题,真的:我想我现在明白了。)
    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 2010-10-04
    • 2020-11-08
    • 2013-05-27
    • 1970-01-01
    • 2021-10-16
    • 2018-08-09
    相关资源
    最近更新 更多