24异常处理程序和软件异常

24异常处理程序和软件异常

ID:44207187

大小:483.38 KB

页数:26页

时间:2019-10-19

24异常处理程序和软件异常_第1页
24异常处理程序和软件异常_第2页
24异常处理程序和软件异常_第3页
24异常处理程序和软件异常_第4页
24异常处理程序和软件异常_第5页
资源描述:

《24异常处理程序和软件异常》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第24章异常处理程序和软件异常杲常是我们不希望冇的出件。在编写程序的时候,程序员不会想去存取-•个无效的内存地址或用0来除一个数值。不过,这样的错谋还是常常会发生的。CPU负责捕捉无效内存访问和用0除一个数值这种错谋,并相应引发一个异常作为对这些错课的反应。CPU引发的异常,就是所谓的硬件异常(hardwareexception)。在本章的丿匸面,我们还会看到操作系统和应川程序也可以引发相应的界常,称为软件界常(softwareexception)当出现一个硬件或软件界常时,操作系统向应川程序提供机会來考察是什么

2、类型的界常被引发,并能够让应用程序自己來处理界常。下血就是界常处理程序的文法:—try{//Guardedbodyexcept(exceptionfilter)//Exceptionhandler}注意—except关键字。每当你建立一个try块,它必须跟随一个fina11y块或-个except块。一个try块Z后不能既冇finally块又冇except块。但町以在try・except块屮嵌套try-fina11y块,反过来也可以。24.1通过例子理解异常过滤器和异常处理程序与结束处理程序(前一章讨论过)不同,异

3、常过滤器(exceptionfilter)和异常处理程序是通过操作系统玄接执行的,编译程序在计算异常过滤器表达式和执行异常处理程序方面不做什么事。下面儿节的内容举例说明try-except块的止常执行,解释操作系统如何以及为什么计算界常过滤器,并给出操作系统执行界常处理程序屮代码的环境。24.1.1Funcmeisterl这里是一个try-exception块的更具体的例子。DWORDFuncmeisterl(){DWORDdwTemp;//I.Doanyprocessinghere._tryr//2.Perfo

4、rmsomeoperation.dwTcmp=0;}__except(EXCEPTION_EXECUTE_HANDLER){//Handleanexception;thisneverexecutes.•••}//3・Continueprocessing・return(dwTemp);}在Funcmeister1的try块中,只是把一个0赋给dwTemp变量。这个操作决不会造成界常的引发,所以except块中的代码永远不会执行。注意这与try-finally行为的不同。在dwTemp被设置成0Z后,下一个要执行的指

5、令是return语句。尽管在结束处理程序的try块中使用return>goto、continue和break语句遭到强烈地反对,但在异常处理程序的try块中使用这些语句不会产生速度和代码规模方面的不良影响。这样的语句出现在与except块相结合的try块中不会引起局部展开的系统开销。24.1.2Funcmeister2让我们修改这个函数,看会发生什么事情:DWORDFuncmeister2(){DWORDdwTemp=0;//l.Doanyprocessinghere.—try{//2.Performsomeop

6、eration(s)・dwTemp=5/dwTemp;//GeneratesanexceptiondwTemp+=10;//Neverexecutes}__except(/*3.Evaluatefilter.*/EXCEPTTON_EXECUTE_HANDLER){//4.Handleanexception.MessageBeep(0);//5・Continueprocessing.return(dwTemp);}Funcmeister2+,try块屮冇一个指令试图以0来除5。CPU将捕捉这个事件,并引发一个硬件

7、异常。当引发了这个异常时,系统将定位到except块的开头,并计算异常过滤器表达式的值,过滤器表达式的结果值只能是卞面三个标识符Z—,这些标识符定义在Windows的Excpt.h文件中(见表24-1)o表24-1标识符及其定义标识符定义为EXCEPTTON_EXECUTE_HANDLER1EXCEPTION_CONTINUE_SEARCH0EXCEPTION_CONTINUE_EXECUTION-1下而几节将讨论这些标识符如何改变线程的执行。在阅读这些内容时町参阅图24-1,该图概括了系统如何处理一个异常的情况

8、。异常继续执行系统确定最里层的try块否找到前面的最内层try块这个try块是否有过滤器表达式、的值是什么?异常继续查找执行axcopt块中的代码在except块之后执行继续图24・1系统如何处理一个异常在Funcmeister2中,异常过滤器表达式的值是EXCEPTION_EXECUTE_HANDLERo这个值的意思是要告诉系统:“我认出了这个异常。即,我感觉这个异常可

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

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

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