异常处理和软件异常 -- SetUnhandledExceptionFilter

异常处理和软件异常

 

1.理解异常过虑器表达式

                __try

{//some code}

                __except(过虑器表达式)

{//code for exception handling}

 

2.过虑器表达式的值

                值只能为以下三种的一个

(1) EXCEPTION_EXECUTE_HANDLER

                                程序中遇到异常后,会立刻__except中的代码,然后接着__except块后的代码继续执行。

                (2) EXCEPTION_CONTINUE_EXECUTION

                                程序中遇到异常后,会立刻__except中的代码,然后跳回__try中发生异常的代码处,重新执行产生异常处的代码。

                (3) EXCEPTION_CONTINUE_SEARCH

                                程序中遇到异常后,__except中的代码不会被执行,而是寻常外层__try所对应的__except

 

SetUnhandledExceptionFilter

       设置全局异常处理代码。若程序中的代码在执行时产生异常,且无相应的异常处理代码,

那么系统会自动调用用户设置的全局异常处理代码处理这些异常。

       C/C++程序在启动时,会自动安装一个异常处理函数UnhandledExceptionFilter

       注:SetUnhandledExceptionFilter(NULL),会重新把UnhandledExceptionFilter置为全局异常处理函数

 

举例

LONG WINAPI TopLevelUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)

{

 

    printf("This is global handler set by SetUnhandledExceptionFilter"n");

 

 

    return 0?EXCEPTION_CONTINUE_EXECUTION :1?EXCEPTION_EXECUTE_HANDLER:EXCEPTION_CONTINUE_SEARCH;    

 

}

 

 

int main()

{

 

    SetUnhandledExceptionFilter(TopLevelUnhandledExceptionFilter);

 

    __try{

    int *p = NULL;

 

    *p = 0;}

 

    __except(EXCEPTION_EXECUTE_HANDLER)

    {

        printf(""nok");

    }

 

    printf("Recovered from exception handler"n");

 

    return 0;

   

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值