あなたが明示的に述べてthis documentationを参照し、GCCのコードカバレッジを取得するためにgcovのツールを使用したい場合:gcovのを使用する場合は、あなたが最初のGCCの2つの特別なオプションを使用してプログラムをコンパイルしなければなりません
: '-fprofile-arcs -ftest-coverage'です。これは、gcov(基本的にはプログラムのフローグラフ)に必要な追加情報を生成するようにコンパイラに指示します。また、gcovに必要な追加のプロファイリング情報を生成するためのオブジェクトファイルにコードを追加します。
より正確には、Instrumentation Optionsを参照することにより、二つのフラグについての私の理解は以下の通りです:
-fprofile-arcs
は、あなたのプログラムの各分岐が取られる回数を示す情報を生成します。言い換えれば、これによりプログラムはその実行に関連して余分なデータを生成します。情報は.gcdaファイルに格納されます。
-ftest-coverage
は
-fprofile-arcs
によって生成される情報を使用して、人間が読める
.gcovファイルを生成するためにgcovの使用することができ、制御フロー情報を含む
.gcnoファイルを生成します。
-fprofile-arcs
で取得したテストカバレッジデータがなければ、何も意味をなさないでしょう。
-fprofile-arcs
はまた、他のフラグなど-fbranch-probabilities
(詳細here)と組み合わせることができます。通常、このフラグを使用する場合、コンパイラは、.gcdaファイルに含まれるプロファイリング情報に基づいて、分岐予測を改善するための最適化を実行します。 -fprofile-arcs
と-fbranch-probabilities
は、-fprofile-generate
と-fprofile-use
を使用すると自動的に有効になります(プロファイルガイド付き最適化とGCCを実行する標準的な方法です)。
希望すると便利です。
オプションについての[ドキュメントを読む](https://gcc.gnu.org/onlinedocs/gcc-6.2.0/gcc/Instrumentation-Options.html#Instrumentation-Options)に、実際に何が表示されていますか行う? –
はい、私は文書を見に行っていました..しかし、なぜ2つのフラグがあるかについて明確ではなく、1つのフラグ(-fprofile-arc)が目的を果たす – MSK