5.13 オブジェクトおよびライブラリにおけるデバッグ情報を削減する方法

ソースファイルごとに生成されるデバッグ情報の量は、いくつかの方法で削減できます。

例えば、以下の方法で削減できます。
  • ヘッダファイルにおいて #define を条件付きで使用しないようにします。使用すると、リンカで重複情報を容易に削除できなくなります。
  • ヘッダファイルが同じ順序でインクルード(#include)されるように C または C++ のソースファイルを変更します。
  • ヘッダ情報を小さなブロックに細分化します。つまり、サイズの大きなヘッダファイルを少数使用するのではなく、サイズの小さなヘッダファイルを多数使用します。こうすることにより、リンカによって除去される共通ブロックの数を増やすことができます。
  • ヘッダファイルは必要な場合に限り、C または C++ のソースファイルにインクルードします。
  • ヘッダファイルを複数のインクルードから保護します。ヘッダファイルの複数のインクルードに対する保護用のコードは、#include ステートメントの周囲ではなく、ヘッダファイルの内部に配置します。例えば、foo.h というヘッダファイルがある場合は、以下を追加します。
    #ifndef foo_h
    #define foo_h
    ...
    // ヘッダファイルの残りの部分は前と同じ
    ...
    #endif /* foo_h */
    
    コンパイラオプション --remarks を使用すると、保護されていないヘッダファイルに関する警告を表示できます。
  • プリプロセッサのマクロ定義をデバッグテーブルから削除するには、--no_debug_macros コマンドラインオプションを使用してコードをコンパイルします。
  • --remove_unneeded_entities を使用するかどうかを検討します。

    注意

    --remove_unneeded_entities には、ファイルごとに生成されるデバッグ情報の量が減る反面、多くのファイルに共通するデバッグセクションの数が少なくなるという欠点があります。最終的なリンク時にリンカが削除できる共通のデバッグセクションの数が減り、最終的なデバッグイメージが必要以上に大きくなる可能性があります。そのため、必要なとき以外、--remove_unneeded_entities は使用しないで下さい。
関連する概念
2.18.1 コンパイルビルド時間
5.12 オブジェクトおよびライブラリにおけるデバッグ情報を削減するメリット
5.3 コンパイラ最適化レベルとデバッグビュー
関連する作業
2.18.2 コンパイルビルド時間を短縮する
関連する参考文書
8.47 --debug_macros、--no_debug_macros
8.162 --remarks
8.163 --remove_unneeded_entities、--no_remove_unneeded_entities
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.