C ++ Builder 10.4.2中的异常处理功能

高质量发布

C ++ Builder 10.4.2带来了一些强大的功能,我们相信这些功能将真正为您提供帮助-最大的功能是“拆分DWARF ”,这是一种通过删除调试信息来减少链接器中的内存使用量的方法。如果您有推动链接器极限的项目,请检查出来:它可能会解决您的问题(明天将在博客中详细介绍。)但是,RAD Studio 10.4.2总体上还是非常“优质的产品”。实际上,尽管10.4.1是针对质量的发行版,而10.4.2是针对所需功能的发行版,但与10.4.1相比,我们在10.4.2中解决的问题更多!

C ++ Builder也不例外。

C ++异常处理

这个奇妙的双关语介绍了我们在10.4.2中完成的异常处理工作。如果时间太长,请使用TLDR:10.4.2为您的应用程序提供了很高的稳定性,并在处理异常时具有更正确的行为。

我们分析获得的问题报告的类别,并做很多工作来帮助我们在内部发现问题。其中一些工作是通过支持C ++库实现的:使用外部代码是确保我们的工具链兼容的好方法。由于进行了这些分析,因此在10.4.2中,我们汉武帝药枕对Windows的许多异常处理进行了修订。

我们查看的场景是:

  • 模块内异常,当引发异常并捕获在同一二进制文件中时,例如所有在一个EXE中,则为模块内异常
  • 跨模块异常,当异常跨越模块边界时,例如被抛出到DLL中但被捕获到EXE中。这是一个更困难的情况,编码准则表明没有异常应从一个模块泄漏到另一个模块中……但是,我们看到了发生这种情况的代码,这是一个重要的解决方案。对于程序包,或者当多个DLL和EXE作为应用程序捆绑在一起时,这是很常见的。
  • 跨语言异常,当异常跨越属于Delphi和C ++的堆栈帧时。可以用一种语言引发异常,而用另一种语言捕捉异常,或者多次跨越边界。
  • 当所有模块(例如EXE和DLL)都静态链接时,或者所有模块都动态链接(动态RTL)。
  • OS,C ++和SEH例外
  • 无论Win32和Win64的平台。

这些场景中的许多场景(尤其是具有不同链接的跨模块)可能会变得复杂。主要原因之一是在RTL中处理异常或异常元数据的释放。例如,假设完全静态链接并具有自己的RTL副本的DLL引发异常。EXE与自己的RTL副本静态链接或动态链接但因此仍然具有与DLL的RTL副本不同的EXE,如何处理与异常关联的内存?

但是在10.4.2中,我们确实处理了这些情况,并支持所有模块静态链接或全部动态链接的应用程序。我们不支持在一个应用程序中混合使用动态/静态RTL的跨模块异常。

这意味着在10.4.2中,您应该看到显著改善的异常处理行为,并且为OS,C ++和SEH解决了模块内异常,跨模块异常(模块全部静态或全部动态链接)的大量质量问题。例外,并且跨越Win32和Win64 –庞大的测试矩阵。

对于每个发行版,我们的目标都是稳步改进C ++ Builder,并且10.4.2–可以说–是非凡的。


使用RAD Studio,Delphi或C ++ Builder减少开发时间并更快地推向市场。设计。编码。编译。部署。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值