结构化异常处理.ppt

上传人:小飞机 文档编号:6015494 上传时间:2023-09-14 格式:PPT 页数:18 大小:251.61KB
返回 下载 相关 举报
结构化异常处理.ppt_第1页
第1页 / 共18页
结构化异常处理.ppt_第2页
第2页 / 共18页
结构化异常处理.ppt_第3页
第3页 / 共18页
结构化异常处理.ppt_第4页
第4页 / 共18页
结构化异常处理.ppt_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《结构化异常处理.ppt》由会员分享,可在线阅读,更多相关《结构化异常处理.ppt(18页珍藏版)》请在三一办公上搜索。

1、结构化异常处理,什么是结构化异常处理,结构化异常处理:SHE(structured exception handling)由编译器实现的处理结束以及异常的特殊功能。目的:是程序更加健壮适用性:Microsoft Virtual C+编译器,以及其他编译器厂商针对Microsoft OS平台开发的编译器下。,SHE的主要功能,结束处理(termination handling)异常处理(exception handling),结束处理,结束处理可以保证去调用和执行一段代码而不去管整段被保护的代码是如何退出的。语法:_try/Guarded body_finally/Termination han

2、dler,结束处理基本原理,无论被保护的代码以何种方式退出都会调用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;_finallydwTemp+;dwTem

3、p+;dwTemp+=10;return dwTemp;,特殊边界,结束处理的另一个特殊语法以及一个API_leave;可以直接从保护代码块掉到finally 块中。BOOL AbnormalTermination();只在 finally 块中调用。如果是自然控制流进入 finally 块那么返回FALSE.反之亦然。它是一个内部函数(intrinsic function),异常处理,如果我们的代码中访问了无效内存地址或者用0 来除一个数。那么,就会导致异常的产生。该线程将被强制退出。例如一段代码用到数学公式的运算,但是谁都不知道传给该函数的数就有可能导致用0来除一个数这样的情况。那么用异常

4、处理就可以帮助我们捕捉这种异常,然后,跳转到我们的异常处理代码来进行修复。,异常处理原理,任何被保护的代码短如果产生异常都会跳转到 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(ex

5、ception 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_

6、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)/444444444MessageBeep(0);/555

7、5555return dwTemp;/Continue Process wont be terminatted,EXCEPTION_CONTINUE_EXECUTION,它表示:从刚才产生异常的那条指令开始恢复执行。注意:返回这个值时请小心!因为如果产生异常的地方没有被处理,那么,就会不停的产生异常,然后,except块不停的重复执行该异常,导致死循环!,EXCEPTION_CONTINUE_SEARCH,它会通知系统去查找前一个try 模块并且调用前一个try模块的异常处理器。如果没有找到则为一个未处理的异常,进程将被终止。此处应注意:如果在系统上,如果用户安装了.,则会出现弹出对话框叫用户调试,或关闭该程序。,异常处理,语言也支持异常处理,但是它是针对语言的。C+的异常处理语法如下:Try.try bodyThrow 5;Catch(int x)/catch body,C+异常与的区别,C+异常处理是不支持程序从硬件异常中恢复出来的。但是6.0已经把这个功能加了上去。因此,如果使用在平台开发程序,两者是没有差别的。但是,如果使用其他的编译器则需要注意了。推荐,使用处理异常,而用辅助处理硬件异常。,Q&A,Thanks for attending,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号