- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【2017年整理】SEH(与结构化异常处理)
SEH(结构化异常处理);SEH(“Structured Exception Handling”),即结构化异常处理.是Windows操作系统提供给程序设计者的强有力的处理程序错误或异常的武器。 ; 大家都知道,在C++中有较完善的异常处理机制,同样在C语言中也有很不错的异常处理机制来支持。那么为什么现在此处还在讨论操作系统平台中所提供的异常处理机制呢? ; 在许多系统中,编程语言所提供的异常处理机制的实现,都是建立在操作系统中所提供的异常处理机制之上,如Windows平台上的VC编译器所实现的C++异常处理模型,它就是建立在SEH机制之上的 。具体关系图如下:;Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.
Copyright 2004-2011 Aspose Pty Ltd.; 因此,操作系统平台中所提供的异常处理机制是非常有必要的。而且,异常处理机制的实现也是操作系统设计时的一个重要课题。微软在Windows中引入SEH的主要动机是为了便于操作系统本身的开发。操作系统的开发人员使用SEH,使得系统更加强壮。我们也可以使用SEH,使我们的自己的程序更加强壮。 ; 使用SEH的好处就是当你编写程序时,只需要关注程序要完成的任务。如果在运行时发生什么错误,系统会发现并将发生的问题通知你。这样的分离,可以使你集中精力处理眼前的工作,而将可能发生的错误放在后面处理。; 我们虽然都知道,SEH是Windows系列操作系统平台提供的一种非常完善的异常处理机制。但这毕竟有些过于抽象了,对于程序员而言,它应该有一套类似于像C++中那样的try,catch,throw等几个关键字组成的完整的异常处理模型。 ;SHE确实也有类似的语法,它由如下几个关键字组成:__try__except__finally__leave ;注意!;SEH实际包含两个主要功能:;结束处理; __ try和__ finally关键字用来标出结束处理程序两段代码的轮廓。在上面的代码段中,操作系统和编译程序共同来确保结束处理程序中的__ finally代码块能够被执行,不管保护体(__try块)是如何退出的。不论你在保护体中用return,还是goto,或者是longjump,结束处理程序(__finally块)都将被调用。;来看一个简单的程序:;__finally块被执行的流程,无外乎三种情况: ; 无论是第2种,还是第3种情况,毫无疑问,它们都会引起很大的系统开销,编译器在编译此类程序代码时,它会为这两种情况准备很多的额外代码。 一般第2种情况,被称为“局部展开”;第3种情况,被称为“全局展开” 。; 对于第2种情况,程序员完全可以有效地避免它,避免“局部展开”引起的不必要的额外开销。在一个函数中,可能有多处的return语句。针对这种情况,SEH提供了一种非常有效的折衷方案,那就是__leave关键字所起的作用,它既具有像goto语句和return语句那样类似的作用(由于检测到某个程序运行中的错误,需要马上离开当前的__try块作用域),但是又避免了“局部展开” 的额外开销。
来看一个简单的例子:;#include stdio.h
void main()
{
puts(hello);
__try
{
int* p;
puts(__try块中);
// 直接跳出当前的__try作用域
__leave;
p = 0;
*p = 25;
}
__finally
{
puts(__finally块中);
}
puts(world);
}
;结束处理小结:;异常处理; 注意:__except关键字。每当你建立一个try块,它必须跟随一个finally块或一个except块。一个try 块之后不能既有finally块又有except块。但可以在try-except块中嵌套try-finally块,反过来也可以。; 与结束处理程序不同,异常过??器和异常处理程序是通过操作系统直接执行的,编译程序在计算异常过滤器表达式和执行异常处理程序方面不做什么事。;MSDN中对查找匹配恰当的异常处理模块的过程等几条规则如下: ;异常过滤器表达式的值有三种情况,如下: ;下面通过一个简单的例子来加深对以上规则的理解:;异常处理小结:;(4) 与C++异常模型相似,try-except模型中,查找搜索异常模块的规则也是逐级向上进行的。但是稍有区别的是,C++异常模型是按照异常对象的类型来进行匹配查找的;而try-except模型则不
您可能关注的文档
- 【2017年整理】Phon与ics自然拼音法.ppt
- 【2017年整理】PPT居氕典模板——外文书籍背景PPT模板.ppt
- 【2017年整理】PPT居氕典模板——展开的书红色简洁清新PPT模板.ppt
- 【2017年整理】PPT延胼示汉字笔画书写顺序(适合任何版本).ppt
- 【2017年整理】PPT与黄河英文介绍.ppt
- 【2017年整理】PPT延胼示汉字笔画书写顺序.doc
- 【2017年整理】ppt逃胴效ppt动画效果倒计时红绿灯ppt技巧.ppt
- 【2017年整理】Prag与maticTransferinChineseEFLLearners’RequestsandApologies.ppt
- 【2017年整理】proe与零件组合.ppt
- 【2017年整理】Prof与essionalEnglishforChemicalEngineering(化工专业英语)6.ppt
最近下载
- 甄嬛传英文剧本.docx
- 【寒假预习专用】2025版初中数学七年级下册苏科版上课课件 12.4 定理.pptx
- 蓝色点阵点线背景大数据云计算主题PPT模板工作总结汇报.pptx VIP
- 人教版数学二年级下册第四单元表内除法(二)大单元整体教学设计.docx
- 备战2022年高考历史复习考点微专题19 妇女解放和女权运动(全国通用版).pdf
- 陕西2025届单招模拟(一)综合试题 .pdf VIP
- 游离股前外穿支皮瓣在皮肤缺损中的应用教案.ppt
- 砂石料供应、运输、售后服务方案14627.pdf
- 病原微生物实验室生物安全管理条例PPT课件.pptx VIP
- 汽车式起重机吊装安全专项施工方案样本.doc
文档评论(0)