下面介绍了引发异常时发生的过程。
异常处理过程
首次引发异常时,但在被调试的程序中的异常处理程序处理异常处理程序之前,调试引擎(DE)会将 IDebugExceptionEvent2 作为停止事件发送到会话调试管理器(SDM)。
IDebugExceptionEvent2
仅当异常设置(在调试包中的异常对话框中指定)指定用户希望在首次发生异常通知时停止时,将发送该异常。SDM 调用 IDebugExceptionEvent2::GetException 以获取异常的属性。
调试包调用 IDebugExceptionEvent2::CanPassToDebuggee 以确定向用户显示哪些选项。
调试包询问用户如何通过打开第一次机会异常对话框来处理异常。
如果用户选择继续,SDM 将调用 IDebugExceptionEvent2::CanPassToDebuggee。
如果方法返回S_OK,则调用 IDebugExceptionEvent2::P assToDebuggee。
- 或者 -
如果方法返回S_FAL标准版,则会为正在调试的程序提供第二次处理异常的机会。
如果调试的程序没有针对第二次异常的处理程序,DE 会将一个
IDebugExceptionEvent2
作为 EVENT_SYNC_STOP发送到 SDM。调试包询问用户如何通过打开第一次机会异常对话框来处理异常。
调试包调用 IDebugExceptionEvent2::CanPassToDebuggee 以确定向用户显示哪些选项。
调试包询问用户如何通过打开第二次异常对话框来处理异常。
如果方法返回S_OK,则调用
IDebugExceptionEvent2::PassToDebuggee
。