调试器异常处理

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

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

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