Split DWARFによるリンカのメモリ使用量の削減

提供: Support
移動先: 案内検索
Note: Split DWARF機能は、C++ Windows 64ビットのみでサポートされています。この機能を使用すると、処理するデータ量が減るため、メモリ不足など生じるリンカエラーが減少します。リンカエラーの処理方法の詳細については、こちらを参照してください。


RAD Studio 10.4.2では、特にデバッグモードで構築されたアプリケーションをリンクする場合に、リンカが処理する必要のあるデータの量を削減するための新機能が導入されています。 この機能は「Split DWARF」と呼ばれ、デバッグ情報をコンパイルされたコードを含む通常のオブジェクトファイルと並行して配置された別の.dwoファイル(DWARFオブジェクト)に分割します。 リンカは、実行可能コードとその他の少量の情報のみをリンクするため、メモリの負担が軽減されます。


C++Builder 64 ビット Windows 版コンパイラ(BCC64)では、デバッグ情報を DWARF形式で生成します。これは BCC32 および BCCOSX で使用しているものとは異なる形式です。

Note: Split Dwarf機能は、デフォルトではオフになっています。

IDEまたはmsbuildでSplit DWARF機能を有効にする

C++BuilderのターゲットプラットフォームがWindows64ビットターゲットに設定されていることを確認し、プロジェクトのオプションダイアログを開き、 [ビルド]- [C ++コンパイラ]-[デバッグ]に移動します。

  1. [Split Dwarfを使用]にチェック入れると、機能が有効になります。
  2. 「DWO 出力ディレクトリ」の設定で、デバッグ情報ファイルを保存するフォルダを指定します。相対パスや環境変数を使用したパスではなく、絶対パスである必要があります。
    (例えば、指定するパスは ..\win64debugではなく、c:\myproject\win64debugのように絶対パスで指定してください。)


サムネイルの作成エラー: ファイルがありません


Thumb03000246ujpn.png


この機能を有効にし、プロジェクトをビルドすると、dwoファイル(DWARFオブジェクト)が生成されます。

Thumb03000247ujpn.png


なお、”Split DWARF”の機能を無効にするには、[プロジェクト オプション]-[ビルド]-[C++ コンパイラ] > [デバッグ] のチェックボックスの選択を解除します。このオプション設定は、IDE内からビルドする場合やコマンドラインでmsbuildを使用してビルドする場合に使用されます。

コマンドラインでSplit DWARF機能を有効にする

Windowsのコマンドラインからbcc64を使用し、Split DWARFを手動で有効にする手順は 以下の通りです。


  1. コンパイラのコマンドラインでSplit DWARFを設定する例は、以下の通りです。
    "-enable-split-dwarf"     
    AND     
    "-split-dwarf-file AFilename.dwo"
    
    上記の例では、bcc64コンパイラは AFilename.dwo ファイルを作成し、その .dwo ファイルを生成するパスを .o オブジェクトファイルと同じパスに出力します。このステップでは、まだ .dwo ファイルにデバッグ情報を含む設定ではないので注意してください。
  2. ”-dwo-dir <ディレクトリ名>”パラメータを使用して、bcc64コンパイラが.dwoファイルを書き出すディレクトリを指定します。 指定するパスは、必ず絶対パスであることを確認してください。
  3. objcopy.exeツールを .o ファイル上で実行します。この操作により、通常のオブジェクト(.o)ファイルからすべてのDWARFセクションが削除され、別の.dwoファイルに配置されます。これは各オブジェクト(.oファイル)に対して行う必要があり、ステップ1で指定した名前と一致している必要があります。
    objcopy --split-dwo=AFilename.dwo AFilename.o
    
  4. 最後に、通常どおりにEXEまたはDLLを作成するために、.oファイルをリンクします。この手順は変更されません。 ファイルにはデバッグ情報が少ないため、ファイルは通常よりも小さくなります。各オブジェクトには、.dwoの名前と場所が含まれています。 ステップ2で説明したように、これは特定のマシンの場所であり、特定の絶対パスである必要があります。

Split DWARFを使用する場合のデバッグ情報のロードに関する問題

Win64デバッグにSplit Dwarfを使用する場合、プロジェクトファイルと同じディレクトリにソースファイルがない場合は、オブジェクトファイルに誤ったディレクトリ情報が生成されることがあります。これは、それらのファイルのシンボル(型、ローカル変数、パラメータ)が利用できないことを意味します。デバッグ時には、行番号を示すエディタの青い点が表示され、ブレークポイントを置くことはできますが、式やシンボルを評価したり検査したりすることはできません。


これを回避するには、[プロジェクトオプション]-[C++コンパイラ]- [デバッグ] - [Split Dwarfを使用] の”DWO 出力ディレクトリ”に絶対パスを指定するか、コマンド ラインでビルドする場合は -dwo-dir コマンドライン オプションを指定します。これらの設定については、上記を参照してください。