- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
异常处理得与失.ppt
异常处理得与失 张银奎 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
您可能关注的文档
- 山药健脾胃作用的研究.pdf
- 山莨菪碱对大鼠急性肝损伤的保护作用及其机制.pdf
- 山西农户分化趋势,点及成因分析特.pdf
- 山西某奶牛养殖公司污染综合治理.pdf
- 山西省不同项群运动员的身体运动智能调查研究_栗晓燕.pdf
- 山豆根水煎液急性毒性及抗炎作用的实验研究.pdf
- 岩土材料微结构测试手段研究综述.pdf
- 岩爆发生条件的基本分析.pdf
- 岩石高边坡稳定性分析思路.pdf
- 峨眉山生态旅游船i兄系统规划设计木.pdf
- 2025年山东省德州市乐陵市不动产登记服务中心招聘考前自测高频考点模拟试题及答案详解1套.docx
- 2025年山东省德州市乐陵市街道办事处招聘公益岗10人考前自测高频考点模拟试题附答案详解.docx
- 2025年山东省德州市乐陵市事业单位招聘考前自测高频考点模拟试题含答案详解.docx
- 教师消防安全培训讲座大纲.pptx
- 2025年推拿治疗学试卷附参考答案详解(满分必刷).docx
- 2025年推拿治疗学试卷附参考答案详解(名师推荐).docx
- 2025年山东省德州市乐陵市人民政府所属事业单位招聘考前自测高频考点模拟试题附答案详解.docx
- 2025年团结一心共同进步班会.pptx
- 2025年山东省德州市临邑县文体广电局招聘考前自测高频考点模拟试题附答案详解.docx
- 2025年山东省德州市乐陵市供销合作社招聘2人考前自测高频考点模拟试题附答案详解.docx
文档评论(0)