程序异常处理

一个应用在出现正常终止执行事件时获取程序控制,这样的事件称为异常,处理异常的机制被称为结构的异常处理。

try except是windows 系统独有的异常处理模型,windows的异常处理模式,称为SEH( structured exception handling ), SEH的异常处理模型主要由try-except语句来完成,与标准的try catch相似。

与C++异常处理模型使用catch关键字来定义异常处理模块,而SEH是采用__except关键 字来定义。

与C++异常模型相似,try-except也支持多层的try-except嵌套。try-except模型中,一个try块只能是有一个except块;而C++异常模型中,一个try块可以有多个catch块。 C++异常模型是按照异常对象的类型来进行匹配查找的;而try-except模型则不同,它通过一个表达式的值来进行判断. __except关键字后面跟的表达式,它可以是各种类型的表达式,例如,它可以是一个函数调用,或是一个条件表达式,或是一个逗号表达式,或干脆就是一个整 型常量等等。最常用的是一个函数表达式,并且通过利用GetExceptionCode()或GetExceptionInformation ()函数来获取当前的异常错误信息,便于程序员有效控制异常 错误的分类处理。SEH异常处理模型中,异常通过RaiseException()函数抛出。RaiseException()函数的作用类似于C++异常模型中的throw。

例如:

LONG WINAPI RecordExceptionInfo(PEXCEPTION_POINTERS pExceptPtrs)
{
     if (...)
     {
           return EXCEPTION_CONTINUE_SEARCH;
     }
     else if (...)
     {
          return EXCEPTION_CONTINUE_EXECUTION;
     }
     else
    {
          return EXCEPTION_EXECUTE_HANDLER;
    }
}
__try
{
...
}
__except(RecordExceptionInfo(GetExceptionInformation()))
{
...
}
在__try语句之后的复合语句是保护段。__except子句之后的复合语句是异常处理器。该处理器指出在保护段执行期间发生一个异常时所执行的一组动作。执行过程如下: 
    1.   执行保护段。 
    2.   如果在保护段执行期间没有异常发生,继续执行__except子句之后的语句。 
    3.   如果在保护段执行期间出现一个异常或者在保护段调用的函数中出现一个异常,则__except表达式被求值,其返回值确定如何处理异常。这里有三个值: 
    EXCEPTION_CONTINUE_SEARCH:异常不能识别,继续搜索栈查找一个处理器,首先搜索包含try-except语句的处理器,然后搜索下一个最高优先级的处理器。 
    EXCEPTION_CONTINUE_EXECUTION:异常被识别但不予考虑。继续在出现异常的点执行。 
    EXCEPTION_EXECUTE_HANDLER:异常被识别。通过执行__except复合语句把控制转向异常处理器,然后在出现异常的点继续执行。因为__except表达式作为一个C异常被求值,它限制为单个值、条件表达式运算符或逗号运算符。如果需要更广泛的处理,该表达式可以调用一个函数返回上述所列的三个值之一。 
关于SEH异常处理更详细的资料,你可以去看windows via c/c++这本书,中文译名是windows核心编程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值