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减少开发时间并更快地推向市场。设计。编码。编译。部署。
需要先安装Patch1。 Patch 2 for RAD Studio 10.4 now available This patch addresses a number of issues in RAD Studio 10.4, pertaining to Delphi Compiler, the RAD Studio IDE in general and the new LSP-based Code Insight in particular, plus C++ Builder Android exceptions and some debugger issues. The installation of this patch requires a prior installation of Patch #1 (separately available on GetIt and in the download portal). Installing this patch is recommended for all RAD Studio 10.4 customers. Note that this patch is fairly large to download (around 190 MB). The patch includes detailed installation instructions as part of the Readme. Please read the steps carefully (or the corresponding steps in this blog post), as the GetIt download does not install the patch automatically. You must follow the instructions in order to install. Just using GetIt is not enough. List of Customer Reported Issues Addressed in 10.4 Patch 2 RAD Studio 10.4 Patch #2 addresses the following issues reported by customer on Embarcadero Quality Portal (https://quality.embarcadero.com): RSP-29628 VCL Grids bug RSP-29560 [REGRESSION] Misalignment in TStringGrid, StretchDraw method in OnDrawCell RSP-29412 Compiler generates incorrect code for if-then RSP-29402 Delphi 10.4 TStringGrid.OnDrawCell bug RSP-29374 Wrong rect coords in TStringGridDrawCell, so image are drawn at wrong position RSP-29347 [DelphiLSP] IDE Crashes when view form as text is selected and running LSP server RSP-29310 Internal error L891 when linking because of complex types based on records with class var RSP-29299 CODEGEN bug in managed fields initialization, associated with new management operators. RSP-29271 [DelphiLSP] Code Insight adds unneeded () when changing procedures/functions RSP-29256 Compiler generates wrong code for template function RSP-29227 Incorrect property value obtained from the record RSP-29226 Access violation with working code under 10.2 RSP-29218 compiling static library under Android error E4620 processing resource .fmx -2 raised RSP-29172 Access Violation when opening License Manager RSP-29142 GoTo statements not working RSP-29136 Dialog constantly pops up during debugging RSP-29129 iOS App simply crashes with a TWebBrowser on it. RSP-29127 Compiler internal error if you ignore the result of a function that returns a generic record RSP-29124 ICE E1812 RSP-28989 License Manager has access violation error when i click on Workstation Licenses RSP-28887 Space does not finish code completion RSP-28857 Default(T) generates bad code for managed record RSP-28821 [Regression] TStringGrid.OnDrawCell parameter Rect contains wrong values RSP-28808 Project options dialog page "Delphi Compiler" is not populated when opening the dialog RSP-28796 RVO for M-records: initialisation of local variables RSP-28761 [REGRESSION] E2154 Type 'T' needs finalization - not allowed in variant record RSP-28737 Compiler error when inlining new Bit Counting Standard Functions RSP-28735 Managed Records Causing Internal Compiler Error RSP-28717 Delphi Package fails to compile RSP-28701 Bind visually on TDBGRID kills the IDE RSP-28669 [BadCG] Value M-record parameters: improper AddRefRecord RSP-28659 RVO for M-records: assignment to local variables RSP-28616 [BadCG] Operator Assign should not allow non-default calling conventions RSP-28615 [BadCG] In the absence of Initialize, finalisation is not guaranteed for local variables RSP-28552 Poor code generation for local managed record variables RSP-28499 Options - Translation tools - Font - Corrupted? RSP-28476 LSP ErrorInsight in Structure Pane only shows one keystroke after editor RSP-28400 [BadCG] Operator Assign is not always invoked for fields RSP-28372 [Regression] Bad codegen in function returning generic type RSP-27268 C++ Builder 10.3.3 Android Exceptions RSP-27251 Internal error when trying to inline with optimization on RSP-24079 Package version is broken RSP-23403 Build for linux 64 error RSP-23024 Record helper class constructor gives senseless compiler warning RSP-22318 Pointer type check missed when object field is a dynarray RSP-21554 Compiler generates incorrect code for parameterized record type RSP-21248 Const dynamic array unexpectedly contains uninitialized data RSP-20372 A generic "reference to function" will only match the first of several overloaded functions RSP-19714 Win32 compiler - Memory corruption with array helpers RSP-18241 *.c source files, added to C++ project, got added to DeploymentManager file list RSP-18148 AV in TList.Remove (64-bit compiler only)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值