gcc
コードカバレッジ:gcov
サーチ…
備考
前書き
コードカバレッジは、各ソースコードステートメントとブランチが実行される頻度に使用される尺度です。この方法は、テストスイートを実行して、可能な限り多くのコードをテストスイートでテストするために通常必要となります。また、プロファイリング中にコードホットスポットを決定するために使用することができ、最適化の努力が最も効果的な場合があります。
GCCでは、カバレッジはgcovユーティリティによって提供されます。 gcovはgccで特定のフラグを指定してコンパイルされたコードでのみ動作します。 gcovがまったく動作する他のコンパイラはほとんどありません。
編集
gcovを使う前に、ソースコードを-fprofile-arcsと-ftest-coverageの2つのフラグを使ってgccでコンパイルする必要があります。これは、gcovに必要な情報と追加のオブジェクトファイルコードを生成するようにコンパイラに指示します。
gcc -fprofile-arcs -ftest-coverage hello.c
リンクするには、 -fprofile-arcsフラグも使用する必要があります。
出力を生成する
カバレッジ情報を生成するには、コンパイルされたプログラムを実行する必要があります。テストスイートのコードカバレッジを作成するとき、この実行ステップは通常、テストスイートによって実行されるため、カバレッジはテストの実行部分と実行されない部分を示します。
$ a.out
プログラムを実行すると、オブジェクトファイルと同じディレクトリに.gcdaファイルが生成されます。
続いて、プログラムのソースファイル名を引数としてgcovを呼び出して、各行の実行頻度を示すコードのリストを生成することができます。
$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'
結果は.gcovファイルに含まれて.gcovます。ここにサンプルがあります:
-: 0:Source:hello.c
-: 0:Graph:hello.gcno
-: 0:Data:hello.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:
-: 3:int main (void)
1: 4:{
1: 5: int i;
-: 6:
1: 7: i = 0;
-: 8:
-: 9:
1: 10: if (i != 0)
#####: 11: printf ("Goodbye!\n");
-: 12: else
1: 13: printf ("Hello\n");
1: 14: return 0;
-: 15:}
ここでは、行番号とソース、および各行が実行された回数を確認できます。行が実行されなかった場合、 #####でマークされ##### 。
実行回数は累積されます。 .gcdaファイルを削除せずにサンプルプログラムを再度実行すると、ソース内の各行が実行された回数のカウントが前の実行の結果に追加されます。