![](https://i-blog.csdnimg.cn/blog_migrate/2eccc8970027f19a0771c41379462814.jpeg)
高质量发布
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–可以说–是非凡的。