计时异常处理:摘要

终止处理程序中执行,无论 __try 语句块终止。原因包括 __try 跳出块,则块并展开堆栈外部传输控件由于异常处理的 longjmp 语句。

说明说明

Visual C++ 支持 setjmplongjmp 语句的两种形式。处理学习版跳过的终止,但更高效。若要使用此版本,请包含文件 SETJMP.H。另一个版本支持处理按以上段落所述的终止。若要使用此版本,请包含文件 SETJMPEX.H。在该学习版的性能提高取决于硬件配置。

操作系统执行所有终止处理程序以适当的顺序,在其他代码可以执行之前,包括异常处理程序的主体。

发生重大的原因是异常时,系统必须在确定下一步之前先执行一个或多个异常处理程序的筛选器部分停止。事件的顺序是:

  1. 将引发异常。

  2. 该系统查看活动异常处理程序层次结构并执行处理程序的筛选器具有最高优先级的;这是异常处理程序新安装和深度嵌套,根据块,和函数调用。

  3. 如果此筛选器通过控件 (返回 0),进程继续,直到的筛选器不通过控件以查找。

  4. 如果此筛选器返回 – 1,则继续执行引发异常的位置,,然后停止不会发生。

  5. 如果筛选器返回 1,将发生以下操作:

    • 该系统展开堆栈,清除所有堆栈帧在当前正在执行代码 (其中异常引发了) 和包含在控件的异常处理程序的堆栈帧。

    • 当将展开堆栈,堆栈中的每终止处理程序中执行。

    • 异常处理程序中执行。

    • 控制传递到代码行此异常处理程序后处理的末尾。

请参见

参考

编写终止处理程序

结构化异常处理(C++)