结构化异常处理.ppt_第1页
结构化异常处理.ppt_第2页
结构化异常处理.ppt_第3页
结构化异常处理.ppt_第4页
结构化异常处理.ppt_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

结构化异常处理 什么是结构化异常处理 结构化异常处理:SHE(structured exception handling) 由编译器实现的处理结束以及异常的特殊 功能。 目的: 是程序更加健壮 适用性: Microsoft Virtual C+ 编译器,以 及其他编译器厂商针对Microsoft OS平台开 发的编译器下。 SHE的主要功能 结束处理(termination handling) 异常处理(exception handling) 结束处理 结束处理可以保证去调用和执行一段代码 而不去管整段被保护的代码是如何退出的 。 语法:_try / Guarded body _finally / Termination handler 结束处理基本原理 无论被保护的代码以何种方式退出都会调 用finally块的代码。 强制进入finally块的两种情况: 1. 从try 块进入finally 块的正常控制流。 2. 从try 块过早的退出(goto , continue ,break, return etc.)或者出现内存访问违规 等异常情况而强制控制转入finally 块。 示例 DWORD FuncExample1() DWORD dwTemp = 0; while(dwTemp 10) _try if(2 = dwTemp)请问:return 的值? continue; if(3 = dwTemp) break; _finally dwTemp+; dwTemp+; dwTemp += 10; return dwTemp; 特殊边界 结束处理的另一个特殊语法以及一个API _leave; 可以直接从保护代码块掉到finally 块中。 BOOL AbnormalTermination(); 只在 finally 块中调用。如果是自然控制流 进入 finally 块那么返回FALSE. 反之亦然 。 它是一个内部函数(intrinsic function) 异常处理 如果我们的代码中访问了无效内存地址或 者用0 来除一个数。那么,就会导致异常的 产生。 该线程将被强制退出。 例如一段代码用到数学公式的运算,但是 谁都不知道传给该函数的数就有可能导致 用0来除一个数这样的情况。那么用异常处 理就可以帮助我们捕捉这种异常,然后, 跳转到我们的异常处理代码来进行修复。 异常处理原理 任何被保护的代码短如果产生异常都会跳 转到 except 块中去执行异常处理。 语法: _try /Guarded code _except(exception filter) /exception handler 结束处理与异常处理语法 注意:每一个try 块必须跟一个finally 块或者是 except 块。一个try 块后面不能既跟finally 又跟 except但是可以这样嵌套若干个。 _try _try /code or nested try finally(except) _finally _except (exception filter) Exception filter Exception Filter 只能是Excpt.h中定义的三 个值之一! #define EXCEPTION_EXECUTE_HANDLER 1 #define EXCEPTION_CONTINUE_SEARCH 0 #define EXCEPTION_CONTINUE_EXECUTION -1 当然也可以通过调用函数判断来返回这些值。在函数里可以通过调用 GetExceptionCode()来判断是哪种错误来决定是否能够处理这个异常, 还是认为该异常不影响系统可以继续运行。该API返回值在winbase.h 中有定义。 EXCEPTION_EXECUTE_HANDLER 如果Exception filter 的值为 EXECUTE_HANDLER则表示:该异常以 有编写好的代码来处理,请系统调用处理 异常的代码。 显然,如果出现异常,程序 会跳到except块中去执行系统认为的异常处 理代码。然后,执行except块后的第一条指 令。 示例 DWORD Funcmeister1() DWORD dwTemp = 0; /111111. _try /222222. dwTemp = 5/dwTemp; dwTemp += 10; _except ( /*3333*/EXCEPTION_EXECUTE_HANDLER) /444444444 MessageBeep(0); /5555555 return dwTemp; /Continue Process wont be terminatted EXCEPTION_CONTINUE_EXECUTION 它表示: 从刚才产生异常的那条指令开始 恢复执行。 注意:返回这个值时请小心!因为如果产 生异常的地方没有被处理,那么,就会不 停的产生异常,然后,except块不停的重复 执行该异常,导致死循环! EXCEPTION_CONTINUE_SEARCH 它会通知系统去查找前一个try 模块并且调 用前一个try模块的异常处理器。 如果没有找到则为一个未处理的异常,进 程将被终止。 此处应注意:如果在 系统上,如果用户安装了.,则 会出现弹出对话框叫用户调试,或关闭该 程序。 异常处理 语言也支持异常处理,但是它是针对 语言的。 C+的异常处理语法如下: Try try body Throw 5; Catch(int x) /catch body C+异常与的区别 C+异常处理是不支持程序从硬件异常中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论