【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语句块的结束地址
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语句块的结束地址
相关文章推荐
- MTK异常处理流程
- 异常处理流程
- VC 调试技术与异常(错误)处理
- Scala学习回顾(二)---- scala函数定义、流程控制及异常处理
- 王家林亲传《DT大数据梦工厂》第二讲Scala函数定义、流程控制、异常处理入门
- APP开发流程实例讲解-儒释道网络电台八天开发全程-优化排错:增强稳定性和添加异常处理
- .net Webservice处理异常之SoapException封装-------处理业务流程执行的错误,向客户端返回原始错误信息
- 我理解的windows异常处理 - VC++ - 中国代码网 -中国第一编程技术与源码下载站
- VC打开/添加文件异常处理
- hdfs 上面block有异常处理流程
- Windows异常处理流程
- 备忘:VC++ 中的异常处理
- Linux下安装MySQL的流程及部分错误异常处理
- python异常处理流程
- Windows异常处理流程
- 磁盘挂载异常处理流程(4)
- 【转帖】Windows异常处理流程 - 看雪软件安全论坛
- springMVC高级部分(数据校验,数据错误回显(自定义格式错误显示),拦截器,异常处理,文件上传,文件下载,springmvc运行流程以及springmvc和struts2对比)
- PHP异常处理流程
- Jvm处理Java Thread 的run方法中抛出异常的流程