[[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*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*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)]]