内容简介:我们最新的personality函数知道它是否可以处理一个异常(假设每个try块仅有一条catch语句,并假设没有使用继承),不过要使得这个知识有用,我们首先需要检查我们可以处理的异常是否匹配抛出的异常。我们试着做一下。当然,我们首先需要知道异常类型。要这样做,在调用__cxa_throw时,我们需要保存异常类型(这是ABI给予我们设置所有自定义数据的机会):
作者: nicolasbrailo
我们最新的personality函数知道它是否可以处理一个异常(假设每个try块仅有一条catch语句,并假设没有使用继承),不过要使得这个知识有用,我们首先需要检查我们可以处理的异常是否匹配抛出的异常。我们试着做一下。
当然,我们首先需要知道异常类型。要这样做,在调用__cxa_throw时,我们需要保存异常类型(这是ABI给予我们设置所有自定义数据的机会):
备注:你可以从我的 github repo 下载完整的源代码。
|
|
|
现在我们可以在personality函数里读异常类型,很容易检查是否异常类型是否匹配(异常名是C++字符串,因此执行一次==足够了):
|
|
|
这里 有新修改的完整源代码。当然如果我们加入这,将有问题(你能看出来吗)。如果在两阶段里抛出异常,并且我们说在第一阶段我们能处理它,那么我们不能在第二阶段再说我们不想要它。我不知道_Unwind_是否根据任何文档处理这个情形,但这最有可能要求未定义的行为,因此只是说我们将处理一切是不足够的。
因为我们给予了personality函数知道着陆垫是否可以处理要抛出异常的能力,我们一直欺骗_Unwind_我们可以处理的异常;即使在我们的 ABI 9 上我们说处理所有的异常,真相是我们不知道我们是否能够处理它。这很容易修改,我们可以像这样做:
|
|
|
同样,在我的 github repo 里获取项目的源代码。
好了,如果运行带有这个修改的personality函数我们会得到什么?失败了,这就是我们得到的!记得我们的抛出函数吗?这个应该捕捉我们的异常:
|
|
|
不幸,我们的personality函数仅检查着陆垫可以处理的第一个类型。如果我们删除Fake_Exception块再尝试,我们得到另一位故事:最终,成功了!我们的personality函数现在可以在正确的帧里选择正确的catch,只要没有带有多个catch的try块。
下一次我们将进一步改进它。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- ADO.NET获取数据(DataSet)同时获取表的架构实例
- 根据 PID 获取 K8S Pod名称 - 反之 POD名称 获取 PID
- .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
- phpinfo获取敏感内容
- 低开销获取时间戳
- python 利率获取
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
CSS3实用指南
吉伦瓦特 / 屈超、周志超 / 人民邮电出版社 / 2012-3 / 49.00元
CSS3为Web的视觉样式语言注入了强大的新功能,让设计人员更加轻松自如地设计优美而引人入胜的内容。借助CSS3,不使用图片就可以创建半透明背 景、渐变、阴影等夺人眼球的视觉效果;还可以使用漂亮、独特、非Web安全的字体显示文本;不用Flash就可以创建动画;不用JavaScript就可 以定制适应用户的设备和屏幕尺寸的设计。 本书通过一系列实用且新颖的范例,向读者展示如何实现以上功能和更多......一起来看看 《CSS3实用指南》 这本书的介绍吧!