调试器异常处理

系统对用户模式异常的处理为复杂的调试器提供支持。 如果正在调试发生异常的进程,系统会生成调试事件。 如果调试器使用的是 WaitForDebugEvent 函数,则调试事件会导致该函数使用指向 DEBUG_EVENT 结构的指针返回。 此结构包含调试器可用于访问线程上下文记录的进程和线程标识符。 该结构还包含包含异常记录副本 的EXCEPTION_DEBUG_INFO 结构。

当系统搜索异常处理程序时,它会尝试两次通知进程的调试器。 第一次通知尝试为调试器提供了处理断点或单步异常的机会。 这称为 第一次机会通知。 然后,用户可以发出调试器命令,以在执行任何异常处理程序之前操作进程的环境。 仅当系统找不到处理异常的基于帧的异常处理程序时,才会尝试通知调试器。 这称为 最后一次通知。 如果调试器在上次机会通知后未处理异常,系统会终止正在调试的进程。

每次尝试通知时,调试器都使用 ContinueDebugEvent 函数将控制权返回到系统。 在返回控件之前,调试器可以根据需要处理异常并修改线程状态,也可以选择不处理异常。 使用 ContinueDebugEvent,调试器可以指示它已处理异常,在这种情况下,计算机状态已还原,线程执行将在发生异常的点继续执行。 调试器还可以指示它未处理异常,这会导致系统继续搜索异常处理程序。