东坡下载:内容最丰富最安全的下载站!

首页IT技术软件教程 → visual C++编译异常分析及解决方法

visual C++编译异常分析及解决方法

相关文章发表评论 来源:本站整理时间:2014/10/27 18:10:01字体大小:A-A+

更多

作者:专题点击:172次评论:0次标签: visual c语言

要想学习好VC必须具备良好的C/C++的基础,必要的英语阅读能力也是必不可少的,因为大量的技术文档多以英文形式发布,否则就会导致VC++编译异常,这大大的影响了程序员的效率。

代码

struct EXCEPTION_REGISTRATION   

{   

EXCEPTION_REGISTRATION* prev;   

DWORD handler;   

int id;   

DWORD ebp;   

};  

VC++编译异常会为绝大部分函数③添加一个EXCEPTION_REGISTRATION类型的局部变量,它的最后一个字段(ebp)与栈桢指针指向的位置重叠。函 数的序言创建这个结构并把它注册给操作系统,尾声则恢复主调函数的EXCEPTION_REGISTRATION。id字段的意义我将在下一节介绍。

VC++编译函数时会为它生成两部分数据 

a)异常回调函数 

b)一个包含函数重要信息的数据结构,这些信息包括catch块、这些块的地址和这些块所关心的异常的类型等等。我把这个结构称为funcinfo,有关它的详细讨论也在下一节。

是考虑了异常处理之后的运行时堆栈。widget的异常回调函数位于由FS:[0]指向的异常处理链的开始位置(这是由widget的序言设置的)。

异常处理

异常处理程序把widget的funcinfo结构的地址交给函数__CxxFrameHandler,__CxxFrameHandler会检查这个结 构看函数中有没有catch块对当前的异常感兴趣。

如果没有的话,它就返回ExceptionContinueSearch给操作系统,于是操作系统会从 异常处理链表中取得下一个结点,并调用它的异常处理程序(也就是调用当前函数的那个函数的异常处理程序)。

这一过程将一直进行下去——直到处理程序找到一个能处理当前异常的catch块为止,这时它就不再返回操作系统了。但是在调用catch块之前(由于有 funcinfo结构,所以知道catch块的入口,参见图3),必须进行堆栈展开,也就是清理掉当前函数的栈桢下面的所有其他的栈桢。这个操作稍微有点 复杂。

因为:异常处理程序必须找到异常发生时生存在这些栈桢上的所有局部对象,VC++编译异常并依次调用它们的析构函数。后面我将对此进行详细介绍。 异常处理程序把这项工作委托给了各个栈桢自己的异常处理程序。从FS:[0]指向的异常处理链的第一个结点开始,它依次调用每个结点的处理程序,告诉它堆 栈正在展开。

与之相呼应,这些处理程序会调用每个局部对象的析构函数,然后返回。此过程一直进行到与异常处理程序自身相对应的那个结点为止。 由于catch块是函数的一部分,所以它使用的也是函数的栈桢。因此,在调用catch块之前,异常处理程序必须激活它所隶属的函数的栈桢。

其次,每个catch块都只接受一个参数,VC++编译异常其类型是它希望捕获的异常的类型。异常处理程序必须把异常对象本身或者是异常对象的引用拷贝到catch块的栈 桢上,编译器在funcinfo中记录了相关信息,处理程序根据这些信息就能知道到哪去拷贝异常对象了。

  • Microsoft Visual Studio合集
  • Visual C++
  • visualbasic
Microsoft Visual Studio合集
(9)Microsoft Visual Studio合集

Microsoft Visual Studio作为一个基本完整的开发工具集,Microsoft Visual Studio为用户提供了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,适合各种编程人员使用。

...更多>>
Visual C++
(26)Visual C++

最全面的VC++合集,这里为有需要的用户提供了从一些网上资源很少的旧版本到官方最新推出的新版本,所有你有需求的VC++版本,在这里都能够直接找到,需要那些老版本的用户可以直接通过这里进行下载。

...更多>>
visualbasic
(15)visualbasic

visual Basic是经常需要编程的人员都是需要使用到的,这里为你提供各种各样的软件的版本,同时也是为你免费的提供最新的vb控件补丁下载,在这里是可以免费的为你解决你需要各种Visual Basic版本问题,欢迎免费下载使用!

...更多>>
更多精彩内容请点击

visual studio

专题

扩展知识

相关评论

阅读本文后您有什么感想? 已有 人给出评价!

  • 2791 喜欢喜欢
  • 2101 顶
  • 800 难过难过
  • 1219 囧
  • 4049 围观围观
  • 5602 无聊无聊
热门评论
最新评论
昵称:
表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
字数: 0/500 (您的评论需要经过审核才能显示)

本类常用软件