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

C++Builder 10.4.2での堅牢な例外処理

close up broken egg isolated on white background

C++Builder 10.4.2にはいくつかの優れた機能が追加され、お客様にとって有益な機能を提供しています。

この新しい機能のうち最も大きいのは「split DWARF」で、これはデバッグ情報を削除することでリンカのメモリ使用量を減らす方法です。リンカの限界を超えるようなプロジェクトをお持ちの方は、そのオプションのチェックを有効にしてみてください。問題が解決する可能性があります。(こちらについては今後のブログで詳しく説明します)

しかし、RAD Studio 10.4.2 は全体的に「品質を重視したリリース」でもありました。実際、10.4.1は品質を重視したリリースで、10.4.2はお客様が必要とする機能を重視したリリースであるにもかかわらず、10.4.1よりも10.4.2の方が多くの問題を修正しました。

C++ 例外処理

C++Builderも例外ではありません。

この素敵なダジャレは、これから10.4.2で取り組んだ例外処理のシナリオを紹介するフレーズです。

少し込み入った話になりますので、結論についてまとめをご覧ください。

10.4.2では、アプリケーションの安定性が非常に高くなり、例外処理時の動作がより正確になりました。お客様から寄せられた問題レポートのカテゴリを分析したり、社内で課題を発見するための作業も多く行っており、その中には、C++ライブラリのサポートも含まれています。外部ライブラリやオープンソースのコードを使用することは、C++Builderのツールチェーンの互換性を確保する良い方法です。これらを分析した結果、10.4.2ではWindows向けの例外処理の多くを見直しました。

エンバカデロで取り組んだシナリオは、以下の通りです。

  • モジュール内例外: 1つのEXEの中で例外が発生する状況で、同じバイナリ内で例外が発生し、キャッチされるケース
  • モジュール間例外: 例外がモジュールの境界を越えた状況、例えば、DLLでスローされた例外がEXEでキャッチされた場合などです。これは扱いが難しい状況で、コーディングのガイドラインでは、例外がモジュールから別のモジュールに伝搬してはならないと示されています。しかし実際には例外は別のモジュールへ伝搬するコードがあり、取り組むべき重要なシナリオでした。これはパッケージや、複数のDLLとEXEがアプリケーションとしてバンドルされている場合によく見られます。
  • 言語間の例外:  例外がDelphiとC++の両方に属するスタックフレームを横断して伝搬するケース。例外は、ある言語で発生して別の言語でキャッチされることもあれば、何度も境界を越えて発生することもあります。
  • すべてのモジュール(たとえば、EXEとDLLの両方)が静的にリンクされている場合、またはすべてのモジュールが動的にリンクされている場合(動的RTL)
  • OS、C++、およびSEHの例外
  • Win32とWin64の両方のプラットフォーム

このようなシナリオの多く、特に異なるリンクを持つクロスモジュールの場合、複雑になる可能性があります。主な理由の1つは、RTLでの例外または例外メタデータの割り当て解除の処理です。たとえば、完全に静的にリンクされ、RTLの独自のコピーを持つDLLが例外を発生させたとします。 RTLの独自のコピーと静的にリンク、または動的にリンクされているが、DLLとは異なるRTLのコピーを持っているEXEは、例外に関連するメモリの解放をどのように処理できるでしょうか?

10.4.2ではそのようなシナリオに対応し、すべてのモジュールが静的にリンクされている、またはすべてが動的にリンクされているアプリケーションをサポートします。但し、1つのアプリケーション内で動的/静的RTLが混在している場合は、モジュール間の例外をサポートしません。

まとめ

10.4.2では、大規模なテストマトリックスにより、例外処理の動作が大幅に改善され、モジュール内例外、モジュール間例外、モジュールがすべて静的またはすべて動的にリンクされている場合の例外、OS、C++、SEHの例外、Win32とWin64の両方の例外について、多くの品質問題が解決されているはずです。

C++Builderはリリースごとに着実に改善することを目指していますが、10.4.2はその中でも言うまでもなく例外的で、特に優れていると言えるでしょう。

このことは、こちらでも説明していますが、外部の複雑なC++ライブラリも10.4.2で利用できることから、その品質の向上が裏付けられています。

今すぐ10.4.2を使い始めよう

すでに、10.4.2のトライアル版が利用可能になっており、今後製品を購入いただくと、10.4.2をダウンロードいただけるようになります。また、すでに製品をお持ちの方は、有効なアップデートサブスクリプションがあれば、既存のライセンスを使用してRAD Studio 10.4.2をご利用いただけます。10.4.2のダウンロードは、新しいカスタマーポータルサイト(my.embarcadero.com)から行えます。

詳細については、以下の情報をご確認ください。

エンバカデロでは、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