您的位置:首页 > 编程语言 > C语言/C++

【C++沉思录】VC++的异常处理流程

2013-08-18 16:35 330 查看
异常处理流程可以总结为9个步骤
1. 在函数入口处设置异常回调函数,其回调函数先设置eax作为FuncIndfo数据的地址,然后跳往__CxxFrameHandler。
2. 异常的抛出由__CxxThrowException函数完成,该函数有两个参数,一个抛出异常的关键字throw的参数的指针,另一个是抛出信息类型的指针ThrowInfo*
3. 在异常回调函数中,可以得到异常对象的地址和对应ThrowInfo数据的地址以及FunInfo表结构的地址。根据所记录的异常类型,进行try块的匹配操作
4. 如果没有找到try块,则析构异常对象,,返回ExceptionContinueSearch,继续下一个异常回调函数的处理
5. 当找到对应的try块,通过TryBlockMapEntry表结构中的pCatch指向catch信息表,用ThrowInfo表结构中的异常类型遍历查找与之匹配的catch块
6. 执行栈展开操作,产生catch块中使用的异常对象
7. 正确析构所有生命期已经结束的对象
8. 跳转到catch块,执行catch块代码
9. 调用_JumpToContinuation函数,返回所有catch语句块的结束地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: