结构化异常

终止处理程序
      1. (structured exception handling, SEH)结构化异常处理。
      不同的编译器针对SEH的实现不尽相同,这里采用Microsoft Visual C++ 编译器规定的语法。
      说明:不要混淆结构化异常处理与C++异常处理,c++异常处理在形式上表现为使用关键字catch和throw,这和结构化异常处理的形式不同。Microsoft Visual c++支持异常处理,它在内部实现上其实就是利用了编译器和windows操作系统的结构化异常处理功能。
      SEH实际上包含两方面的功能:终止处理(termination handling)和异常处理(exception handling).

       形式:_try {......}_finally{......}。_leave

注意:如果一个“栈耗尽异常”(stack exhaustion exception)发生在try代码块里,finally块就很可能得不到运行的机会,因为运行在出错进程里的WER代码都可能没有足够的栈空间去报告错误,所以在这种情况下,进程往往是不加任何提示地被终止。还有如果异常导致SEH链的中断,终止处理程序也不会得到执行。最后如果异常发生在异常过滤程序里,终止程序也不会得到执行。一条经验法则则是尽量限制在catch或者finally块中代码所做的工作。尽管绝大部分情况下,try块中的提前退出都会被终止程序所捕获,但是在进程或者线程被提前终止的情况下,系统没法保证finally代码块的执行。(abort内部调用的是ExitProcess).

      2. 内在函数是由编译器所识别并处理的特殊函数。编译器会为这个函数生成内联代码,而不是生成代码来调用这个函数,比如,memcpy是内在函数(如果打开编译开关/0i)。当编译器见到对memcpy的调用,它会直接将memcpy的代码放置到memcpy的函数里,而不是生成调用memcpy的代码,这样做通常让程序运行的更快,但体积更大。内在函数AbnormalTermination和memcpy的区别在于它只会以内置这一种形式存在。任何c/c++动态运行库都没有这个函数。我们只能在finally块里调用AbnormalTermination函数,它将返回一个布尔值来表明一个与当前finally块相关的try是否已经提前退出。异常TRUE.

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值