zoukankan      html  css  js  c++  java
  • 异常处理

    1、结构化异常处理SEH功能:终止处理、异常处理

    2、终止处理程序确保不管被保护代码是如何退出的,终止处理程序都会调用和执行(除非调用ExitProcess、ExitThread、TerminateProcess、TerminateThread),语法:

    __try{

    //Guarded body

    ...

    }

    __finally{

    //Termination handler

    ...

    }

    3、不要在终止处理程序里包含让try块提前退出的语句,从try块和finally块中移除return,continue,break,goto等语句

    4、__leave可以将代码执行控制流跳转到try块的结尾,避免在try块中使用return语句

    5、三种会引起finally块执行的情形:

    从try块到finally的正常代码控制流;

    局部展开:从try块中的提前退出(return语句等),将程序控制流强制转入finally块;

    全局展开:在try代码块中调用函数,如果函数中引起内存访问违规或者其他异常,那么将触发finally块执行。

    6、由CPU抛出的异常都是硬件异常,操作系统和应用程序抛出的异常称为软件异常

    7、异常处理程序语法结构:

    __try{

    //Guarded body

    ...

    }

    __except(exception filter){

    //Exception handler

    ...

    }

    8、try块后面必须跟finally块和except块,但不能同时存在finally和except块,也不能多个finally块或except块,可以嵌套使用。

    9、终止处理程序主要由编译器执行,异常处理程序主要由操作系统执行

    10、当except块中代码执行完毕后,代码执行从except块后的第一句代码继续。

    11、GetExceptionCode函数的返回值表明刚刚发生的异常的类型,这个函数只能在异常过滤程序中调用。

    12、调用RaiseException函数可以抛出一个软件异常。

    13、全局异常过滤函数负责处理未处理异常,SetUnhandledExceptionFilter函数用来安装我们自己的全局异常过滤程序,UnhandledExceptionFilter函数为默认过滤程序,该函数在Kernel32.dll中。

    14、 AddVectoredExceptionHandler函数负责向量化异常处理程序的注册,当进程中任意线程发生异常时,异常处理程序会被调用。

    15、 C++异常中的catch语句对应SEH异常过滤程序,catch块中的代码对应SEH __except块中的代码。

    16、当一个进程因为未处理异常而终止时,Windows错误报告WER会创建关于未处理异常及其执行上下文的错误报告。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

  • 相关阅读:
    python集成开发环境Anaconda的安装
    hasMap2
    WireShark:TCP三次握手 抓包
    CCF 201409-4 最优配餐
    201403-4 无线网络
    java IO的字节流和字符流及其区别
    平衡二叉树DSW算法
    警惕Java编译器中那些“蜜糖”陷阱
    laravel 学习笔记 —— 神奇的服务容器
    LNMP下安装phpmyadmin的一个小错误解决办法
  • 原文地址:https://www.cnblogs.com/yapp/p/11933553.html
Copyright © 2011-2022 走看看