Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++Новости

Надежная обработка исключений в C ++ Builder 10.4.2

close up broken egg isolated on white background

Качественный релиз

C ++ Builder 10.4.2 предлагает несколько замечательных функций, которые, как мы полагаем, действительно помогут вам — самая большая из них — « разделенный DWARF », способ уменьшить использование памяти в компоновщике путем удаления отладочной информации. Если у вас есть проекты, которые выходят за пределы возможностей компоновщика, проверьте это: он может решить ваши проблемы (см. Этот пост в блоге ). Однако в целом RAD Studio 10.4.2 также была «качественной версией». На самом деле, несмотря на то, что 10.4.1 — это выпуск, нацеленный на качество, а 10.4.2 — на необходимые вам функции, мы исправили больше проблем в 10.4.2, чем в 10.4.1!

И C ++ Builder не исключение.

Обработка исключений C ++

Этот замечательный каламбур знакомит с работой по обработке исключений, которую мы проделали в 10.4.2. Если это слишком долго, вот TL; DR: 10.4.2 дает вашим приложениям очень высокую стабильность и более правильное поведение при обработке исключений.

Мы анализируем категории отчетов о проблемах, которые получаем, а также выполняем много работы, которая помогает нам находить проблемы внутри компании. Часть этой работы осуществляется за счет поддержки библиотек C ++ : использование внешнего кода — хороший способ гарантировать совместимость нашей инструментальной цепочки. Благодаря этому анализу в 10.4.2 мы пересмотрели большую часть нашей обработки исключений для Windows.

Мы рассмотрели следующие сценарии:

  • Исключения внутри модуля , когда исключение генерируется и перехватывается в одном и том же двоичном файле, например, все в одном EXE.
  • Межмодульные исключения , когда исключение пересекает границу модуля, например, было выброшено в DLL, но перехвачено в EXE. Это более сложная ситуация для обработки, и рекомендации по кодированию указывают, что исключения не должны просачиваться из модуля в другой… но мы видим код, в котором это происходит, и это важный сценарий, который необходимо решить. Это обычное явление для пакетов или когда несколько библиотек DLL и EXE объединены в одно приложение.
  • Межъязыковые исключения , когда исключение пересекает фреймы стека, принадлежащие как Delphi, так и C ++. Исключения могут возникать на одном языке и перехватываться на другом или многократно пересекать границу.
  • Когда все модули (например, EXE и DLL) статически связаны или все модули динамически связаны (динамическое RTL).
  • ОС, C ++ и исключения SEH
  • Обе платформы Win32 и Win64 .

Многие из этих сценариев, особенно кросс-модульные с различным связыванием, могут быть сложными. Одна из основных причин — обработка освобождения исключения или метаданных исключения в RTL. Например, предположим, что библиотека DLL, которая полностью статически связана и имеет собственную копию RTL, выдает исключение. Как может EXE, который также статически связан со своей собственной копией RTL или динамически связан, но, следовательно, по-прежнему имеет другую копию RTL для DLL, обрабатывать освобождение памяти, связанной с исключением?

Тем не менее, в 10.4.2 мы обрабатываем эти сценарии и поддерживаем приложения, в которых все модули статически связаны или все динамически связаны. Мы не поддерживаем межмодульные исключения в сочетаниях динамического / статического RTL в одном приложении.

Это означает, что в 10.4.2 вы должны увидеть значительно улучшенное поведение обработки исключений и большое количество проблем с качеством, решенных для внутримодульных исключений, межмодульных исключений, когда все модули статически или все динамически связаны, для ОС, C ++ и SEH. исключения, и как для Win32, так и для Win64 — массивная тестовая матрица.

С каждым выпуском мы стремимся постоянно улучшать C ++ Builder, и 10.4.2, можно сказать, является исключительным.


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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

IN THE ARTICLES