- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
异常处理得与失 张银奎 yinkui.zhang@ 摘要 异常机制为处理软件执行过程中的“意外”情况提供了一种重要手段,但它是否可以取代传统的错误处理方法呢?C++语言规范定义了异常处理,但没有规定如何来实现。操作系统是如何分发异常的,异常处理的开销有多大呢?本演讲以Windows操作系统和Visual C++编译器为例层层剥茧,由浅入深的回答了以上问题,比较深入的探讨了如何在软件开发中正确的使用异常处理机制,并以实验数据和演示分析了滥用异常处理会导致的严重问题。 目录 异常过程 未处理的异常 异常处理的开销 观点和建议 异常来源 CPU检测到的执行错误 除0,GP,无效指令 程序产生 Int 3, throw E Machine Check Exceptions 总线错误,ECC错误,Cache错误 异常来源 分类 C++异常处理(EH) C++标准,关键字:try, catch, throw 结构化异常处理(SEH) Structured Exception Handling Windows操作系统的异常机制 具体实现依赖于编译器:__try, __except, __finally 向量式异常处理(VEH) Vectored Exception Handling Windows XP引入,对SEH的补充 异常处理五阶段 发生 表征 捕捉分发 处理 EXCEPTION_CONTINUE_SEARCH (0) EXCEPTION_EXECUTE_HANDLER (1) EXCEPTION_CONTINUE_EXECUTION (-1) 善后 恢复(resuming exception) 终止(terminating exception) 异常处理五阶段 - SEH int filter(void) { /* Stage 4 */ } int main(void) { __try { if (some_error) /* Stage 1 */ RaiseException(...); /* Stage 2 */ /* Stage 5 of resuming exception */ } __except(filter()) /* Stage 3 */ { /* Stage 5 of terminating exception */ } return 0; } 异常处理五阶段 - EH int main(void) { try { if (some_error) /* Stage 1 */ thow E(); /* Stage 2 */ } carch(E) /* Stage 3 */ { /* Stage 4 */ } /* Stage 5 */ return 0; } 主动抛出异常 CxxThrowException #define CXX_FRAME_MAGIC 0#define CXX_EXCEPTION 0xe06d7363 VOID NTAPI _CxxThrowException ( IN PVOID Object, IN PVOID CxxExceptionType ) { ULONG_PTR ExceptionInformation[3]; ExceptionInformation[0] = CXX_FRAME_MAGIC; ExceptionInformation[1] = (ULONG_PTR) Object; ExceptionInformation[2] = (ULONG_PTR) CxxExceptionType; RaiseException( CXX_EXCEPTION, EXCEPTION_NONCONTINUABLE, 3, ExceptionInformation ); } RaiseException VOID NTAPI RaiseException ( IN ULONG ExceptionCode, IN ULONG ExceptionFlags, IN ULONG NumberParameters, IN CONST ULONG_PTR *ExceptionInformation ) { EXCEPTION_RECORD ExceptionRecord = { ExceptionCode, Excep
您可能关注的文档
最近下载
- 26. 26个英文字母-复习课件-1字母闯关游戏(共30张PPT).pdf VIP
- 上海市职业技能等级认定试卷 模具工(四级)考场、考生准备通知单02.doc VIP
- 健康险手册使用说明.pptx VIP
- 急性心肌梗死诊断及治疗课件.ppt VIP
- 饲料添加剂项目企业经营战略手册(参考).docx
- 光伏电站项目建设方案.docx
- 数字智慧方案5496丨商业综合体地块智能化系统设计汇报方案(66页PPT).pptx VIP
- 体例格式9:工学一体化课程《小型网络安装与调试》任务1学习任务工作页.docx VIP
- 城投集团防汛防台专项应急预案(2018版).docx VIP
- 量子之年:从2025年从概念到现实报告(英文版).pdf VIP
文档评论(0)