Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++NotíciaRAD Studio

Manipulação robusta de exceções no C ++ Builder 10.4.2

close-up-broken-egg-isolated-on-white-background

Liberação de qualidade

O C ++ Builder 10.4.2 traz alguns ótimos recursos que acreditamos que realmente irão ajudá-lo – o maior sendo ‘ dividir DWARF ‘, uma maneira de reduzir o uso de memória no vinculador removendo informações de depuração. Se você tem projetos que ultrapassam os limites do vinculador, verifique: isso pode resolver seus problemas (consulte esta postagem do blog .) No entanto, o RAD Studio 10.4.2 no geral também foi um ‘lançamento de qualidade’. Na verdade, apesar de 10.4.1 ser a versão voltada para a qualidade e 10.4.2 para os recursos de que você precisa, corrigimos mais problemas em 10.4.2 do que em 10.4.1!

E o C ++ Builder não é exceção.

Tratamento de exceções C ++

Este trocadilho maravilhoso apresenta o trabalho de tratamento de exceções que fizemos em 10.4.2. Se for muito longo, aqui está o TLDR: 10.4.2 oferece aos seus aplicativos uma estabilidade muito alta e um comportamento mais correto ao lidar com exceções.

Analisamos categorias de relatórios de problemas que recebemos e também fazemos muito trabalho que nos ajuda a encontrar problemas internamente. Parte desse trabalho é por meio do suporte a bibliotecas C ++ : usar código externo é uma boa maneira de garantir que nossa cadeia de ferramentas seja compatível. Por causa dessas análises, em 10.4.2 revisamos muito de nosso tratamento de exceções para Windows.

Os cenários que observamos são:

  • Exceções no módulo , quando uma exceção é lançada e capturada no mesmo binário, como tudo em um EXE.
  • Exceções de módulo cruzado , quando uma exceção cruza um limite de módulo, como sendo lançada em uma DLL, mas capturada em um EXE. Esta é uma situação mais difícil de lidar, e as diretrizes de codificação indicam que nenhuma exceção deve vazar de um módulo para outro … mas vemos o código onde isso ocorre e é um cenário importante a ser enfrentado. É comum com pacotes ou quando várias DLLs e um EXE são agrupados como um aplicativo.
  • Exceções entre linguagens , quando uma exceção cruza frames de pilha pertencentes a Delphi e C ++. As exceções podem ser levantadas em um idioma e detectadas em outro ou cruzar os limites várias vezes.
  • Quando todos os módulos (por exemplo, EXE e DLL) estão estaticamente vinculados ou todos os módulos estão dinamicamente vinculados (RTL dinâmico).
  • Exceções de sistema operacional, C ++ e SEH
  • Ambos Win32 e Win64 plataformas.

Muitos desses cenários, especialmente entre módulos com links diferentes, podem se tornar complexos. Um dos principais motivos é lidar com a desalocação de uma exceção ou metadados de exceção no RTL. Por exemplo, suponha que uma DLL, que está totalmente vinculada estaticamente e tem sua própria cópia do RTL, lance uma exceção. Como um EXE, que também está estaticamente vinculado à sua própria cópia do RTL, ou dinamicamente vinculado mas, portanto, ainda tem uma cópia diferente do RTL para a DLL, pode lidar com a liberação de memória associada à exceção?

No entanto, em 10.4.2, lidamos com esses cenários e suportamos aplicativos em que todos os módulos são vinculados estaticamente ou todos estão dinamicamente vinculados. Não oferecemos suporte a exceções entre módulos em combinações de RTL dinâmico / estático em um único aplicativo.

Isso significa que em 10.4.2 você deve ver um comportamento de tratamento de exceções significativamente melhorado e um grande número de problemas de qualidade resolvidos para exceções no módulo, exceções entre módulos, onde os módulos são todos estáticos ou dinamicamente vinculados, para OS, C ++ e SEH exceções, e em Win32 e Win64 – uma matriz de teste massiva.

Com cada lançamento, pretendemos melhorar constantemente o C ++ Builder, e o 10.4.2 é – pode-se dizer – excepcional.


Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

IN THE ARTICLES