Show page source of usage #74267

[[PageNavi(NavigationList)]]

=== 使用方法 ===

lcovの使用方法は[readme readme]の「4.ユーザ空間のプログラムのカバレッジデータをアクセスする方法の例」に書かれている方法の通りなのですが、分かりにくいので、1つ1つ説明していきます。[[BR]]

==== 1.前提条件 ====
{{{ html
<span style="float:right">
}}}

{{{ GoogleAdsense
<script type="text/javascript"><!--
google_ad_client = "ca-pub-0702888637712330";
/* 300&#42;250 11/12/04作成 */
google_ad_slot = "7461422350";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
}}}

{{{ html
</span>
}}}

 まず、前提条件としてgccにてコンパイルするときに、オプションに「{{{-fprofile-arcs}}}」と「{{{-ftest-coverage}}}」が指定されている必要があります。[[BR]]
 あと、リンク時に{{{-lgcov}}}の指定を忘れずに。[[BR]]
 例えば、ソースファイルがmain.cだとすると、通常は[[BR]]
   {{{gcc -g -c main.c}}}[[BR]]
   {{{gcc -o a.out main.o}}}
 という感じでコンパイル、リンクするところを、
   {{{gcc -g -fprofile-arcs -ftest-coverage -c main.c}}}[[BR]]
   {{{gcc -o a.out main.o -lgcov}}}[[BR]]
 で、コンパイル、リンクすることになります。[[BR]]
 そうそう、上記の例ではやっていませんが、「{{{-O0}}}」(※大文字のオーとゼロです)はつけた方がいいです。理由ですが、[http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_6.html#SEC116 最適化してしまうと、うまくできないことがあるんです]。なので、最適化しないよう、「{{{-O0}}}」をつけることをお勧めします。[[BR]]

==== 2.カウンターのリセット ====
 カウンターをリセットするために、[[BR]]
 「{{{lcov --directory appdir --zerocounters}}}」 、もしくは、「{{{lcov -d appdir -z}}}」[[BR]]
 (「appdir」はソースがあるディレクトリです。)[[BR]]
 と[readme readme]には書かれていますが、必ずしも行う必要はありません。[[BR]]
 これは、gcovの*.daファイルに記録されている実行カウンター(どこが何回実行されたか)を初期化しているのですが、まだ1度もプログラムを起動していなければ、カウンター値は0なので、行う必要なしです。[[BR]]

==== 3.プログラムの実行 ====
 プログラムを実行してください。[[BR]]
 例えば、[[BR]]
 {{{./a.out}}}[[BR]]
 を実行する。[[BR]]

==== 4.カバレッジの状態をキャプチャ ====
{{{ html
<span style="float:right">
}}}

{{{ GoogleAdsense
<script type="text/javascript"><!--
google_ad_client = "ca-pub-0702888637712330";
/* 300&#42;250 11/12/04作成 */
google_ad_slot = "7461422350";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
}}}

{{{ html
</span>
}}}

 [readme readme]には、[[BR]]
 ファイルに現在のカバレッジの状態をキャプチャする[[BR]]
 {{{lcov --directory appdir --capture --output-file app.info}}}[[BR]]
 もしくは、[[BR]]
 {{{lcov -d appdir -c -o app.info}}}[[BR]]
 (「appdir」はソースがあるディレクトリ、「app.info」はトレースファイルの名前で、何でも良いです。)[[BR]]
 を実行しろとなっています。これは、やってください。[[BR]]

==== 5.HTML出力 ====
 [readme readme]には[[BR]]
 HTML出力の取得[[BR]]
 {{{genhtml app.info}}}[[BR]]
 (「app.info」は4番で指定したトレースファイル名前です。)[[BR]]
 を実行するように書かれています。これも行ってください。 [[BR]]

==== 6.結果を見る ====
 ファイルがいろいろ出来るので、index.htmlを適当なブラウザ(Firefoxなど)で開きましょう。

=== 参考資料など ===
 * gcc 関連
   * [http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_2.html Using and Porting the GNU Compiler Collection (GCC) - GCCコマンド・オプション]
 * gcov 関連
   * [http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_6.html Using and Porting the GNU Compiler Collection (GCC) - gcov: テスト・カバレッジ・プログラム]
 * lcov 関連
   * [lcov.1 lcov]
   * [genhtml.1 genhtml]

[[PageNavi(NavigationList)]]