结构化异常处理

结构化异常处理

ID:37465355

大小:276.31 KB

页数:18页

时间:2019-05-12

结构化异常处理_第1页
结构化异常处理_第2页
结构化异常处理_第3页
结构化异常处理_第4页
结构化异常处理_第5页
资源描述:

《结构化异常处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、结构化异常处理什么是结构化异常处理结构化异常处理:SHE(structuredexceptionhandling)由编译器实现的处理结束以及异常的特殊功能。目的:是程序更加健壮适用性:MicrosoftVirtualC++编译器,以及其他编译器厂商针对MicrosoftOS平台开发的编译器下。SHE的主要功能结束处理(terminationhandling)异常处理(exceptionhandling)结束处理结束处理可以保证去调用和执行一段代码而不去管整段被保护的代码是如何退出的。语法:__try{

2、//Guardedbody}__finally{//Terminationhandler}结束处理基本原理无论被保护的代码以何种方式退出都会调用finally块的代码。强制进入finally块的两种情况:1.从try块进入finally块的正常控制流。2.从try块过早的退出(goto,continue,break,returnetc.)或者出现内存访问违规等异常情况而强制控制转入finally块。示例DWORDFuncExample1(){DWORDdwTemp=0;while(dwTemp<10)

3、{__try{if(2==dwTemp)请问:return的值?continue;if(3==dwTemp)break;}__finally{dwTemp++;}dwTemp++;}dwTemp+=10;returndwTemp;}特殊边界结束处理的另一个特殊语法以及一个API__leave;可以直接从保护代码块掉到finally块中。BOOLAbnormalTermination();只在finally块中调用。如果是自然控制流进入finally块那么返回FALSE.反之亦然。它是一个内部函数(in

4、trinsicfunction)异常处理如果我们的代码中访问了无效内存地址或者用0来除一个数。那么,就会导致异常的产生。该线程将被强制退出。例如一段代码用到数学公式的运算,但是谁都不知道传给该函数的数就有可能导致用0来除一个数这样的情况。那么用异常处理就可以帮助我们捕捉这种异常,然后,跳转到我们的异常处理代码来进行修复。异常处理原理任何被保护的代码短如果产生异常都会跳转到except块中去执行异常处理。语法:__try{//Guardedcode}__except(exceptionfilter){/

5、/exceptionhandler}结束处理与异常处理语法注意:每一个try块必须跟一个finally块或者是except块。一个try块后面不能既跟finally又跟except但是可以这样嵌套若干个。__try{__try{//codeornestedtry–finally(except)}__finally{}}__except(exceptionfilter){}ExceptionfilterExceptionFilter只能是Excpt.h中定义的三个值之一!#defineEXCEPTION

6、_EXECUTE_HANDLER1#defineEXCEPTION_CONTINUE_SEARCH0#defineEXCEPTION_CONTINUE_EXECUTION-1当然也可以通过调用函数判断来返回这些值。在函数里可以通过调用GetExceptionCode()来判断是哪种错误来决定是否能够处理这个异常,还是认为该异常不影响系统可以继续运行。该API返回值在winbase.h中有定义。EXCEPTION_EXECUTE_HANDLER如果Exceptionfilter的值为EXECUTE_HA

7、NDLER则表示:该异常以有编写好的代码来处理,请系统调用处理异常的代码。显然,如果出现异常,程序会跳到except块中去执行系统认为的异常处理代码。然后,执行except块后的第一条指令。示例DWORDFuncmeister1(){DWORDdwTemp=0;//111111.__try{//222222.dwTemp=5/dwTemp;dwTemp+=10;}__except(/*3333*/EXCEPTION_EXECUTE_HANDLER){//444444444MessageBeep(0);

8、}//5555555returndwTemp;//ContinueProcesswon'tbeterminatted}EXCEPTION_CONTINUE_EXECUTION它表示:从刚才产生异常的那条指令开始恢复执行。注意:返回这个值时请小心!因为如果产生异常的地方没有被处理,那么,就会不停的产生异常,然后,except块不停的重复执行该异常,导致死循环!EXCEPTION_CONTINUE_SEARCH它会通知系统去查找前一个try模块并且调用前一个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。