13 Oct 2012, 01:37

Eclipse CDTで gcovの結果を見てみる

gcovの出力結果をEclipseでみる方法を調べてみた。

Eclipse 3.7(Indigo)までは CDT gcov pluginが動いたけど、Eclipse4.2 (Juno)からは、動かない・・・。しかし、代わりに、Eclipse Juno では GCov pluginが動作した。

というわけで、2つの方法を紹介する。

その1CDT gcov plugin

インストール

以下のサイトからダウンロード。

http://sourceforge.jp/projects/ginkgo/

ダウンロードファイルを解凍すると featuresとpluginというファイルがある。

それぞれeclipse.exeと同じフォルダにあるfeaturesとpluginにコピーする。(org.ginko.gcov.feature_0.2.2とorg.ginkgo.gcov_0.2.2.jar)

あとは、- cleanオプションをつけてEclipse再起動。

CDT gcov pluginの設定

[プロジェクトエクスプローラ]からカバレッジを出したいプロジェクトを右クリックしてオプションを選択。

C Coverageという項目があるので、Activate natureを有効にする。

image

gcovを実行して、出力用データを作成する

Eclipseで表示するには、.gcovという形式のファイルをつくる必要がある。
以下の3ステップで作成する。

ビルドして hogehoge.gcnoを作成

ビルドして.gcnoファイルを作成する。
ビルドするときに、以下のオプションをつける。

-fprofile-arcs -ftest-coverage

MakefileだとCFLAGSに追加すればよい。

CFLAGS += -fprofile-arcs -ftest-coverage

実行ファイルを実行して、hogehoge.gcdaを作成

実行ファイル(.exe)を実行すると、*.gcdaができる。
自分の場合はGoogleTestでテストコードを書いて、テストを実行することで、カバレッジを得る。

gcovコマンドを実行して、hogehoge.c.gcovを作成

Eclipseでカバレッジを得るには、もう一工夫必要。
実行してできた、hogehoge.gcdaに対し、以下のコマンドを実行するとhogehoge.c.gcovというファイルができる。

gcov hogehoge.gcda

 

その2 GCov plugin を使う

以下からダウンロード。
http://wiki.eclipse.org/Linux_Tools_Project/GCov/User_Guide

ちなみに、Pleades日本語プロジェクトからEclipse 4.2 CDTを落としてきたら、Defaultでついていた。
http://mergedoc.sourceforge.jp/index.html#/pleiades.html

hogehoge.gcdaを作る

つくりからは上に同じ。
作成したら、プロジェクトビューから、作成したhogehoge.gcdaを開く。
実行バイナリファイルに含まれるすべてのカバレッジデータを出力するか、ファイル単位で出力するかを選択する。

image

ファイル単位で開いてみると、カラー表示されたカバレッジ出力結果が表示される。

image

実行バイナリファイル単位で表示すると、gcovビューにカバレッジの集計が見える。
(開くまで時間がかかる)

image

(GCovユーザガイド)http://wiki.eclipse.org/Linux_Tools_Project/GCov/User_Guide#Installation_and_Set-Up

22 Sep 2012, 22:20

C言語でのgcovカバレッジ計測結果をJenkinsで表示させる

C言語でのカバレッジ計測結果をJenkinsで表示させる方法について調べてみた。

2つの方法があるみたい。

  1. lcov + HTML Publisher plugin で出力

    Hudsonの使い方21 Hudsonでユニットテスト網羅率測定(C言語)

  2. gcovr + Coberturaプラグイン で

    Jenkinsでテストとカバレッジの結果をグラフ表示できるようにする

    Jenkins を iOS アプリ開発に導入してみた (gcov編)

今回は2番目の方法で試してみた。 流れとしては以下のとおり。

C言語のプロダクトコード

↓(gcov)

カバレッジデータ

↓(gcovrでCobertura形式のXML出力)

XMLカバレッジ結果

↓(Jenkins Cobertura Plugin)

Jenkinsて結果出力

C言語の定番カバレッジツール gcov でカバレッジを計測する

まずはC言語の定番カバレッジツール gcov でカバレッジを計測してみる。

Cygwinではデフォルトでgcovコマンドがある。

gcovを使うためには、コンパイルをするときに、以下のコンパイルオプションをつける必要がある。

-fprofile-arcs -ftest-coverage

Makefileをいじるときは、以下を追加すればよい。

CFLAGS += -fprofile-arcs -ftest-coverage
LDFLAGS += -fprofile-arcs

すると、.gcno というファイルができる。 実行ファイルを実行すると、.gcdaというファイルができる。

これが、カバレッジ計測結果データ。次に、これをXML形式に変換する。

gcovrでXML形式のカバレッジ結果を出力する

gcovrとは、gcovでの出力結果を編集して出力してくれるツール。

Jenkinsで結果を見るにはCoberturaと呼ばれるXMLフォーマットに変換する必要がある。

まずは、以下からダウンロードする。 公式のページはココPythonで記述されたコードなので、適切なことろに保存する。(/usr/local/bin/とか)

gcovr

コマンドラインからだと、以下のコマンドで取得

wget https://software.sandia.gov/trac/fast/export/2799/gcovr/trunk/scripts/gcovr

保存したら、実行権限を与える。

chmod u+x gcovr

gcovrは以下の形式で実行する。

gcovr --xml --output=(出力ファイル名).xml (ディレクトリ名)

サンプル

gcovr --xml --output=gcovr_result.xml src/  

これで、XMLファイルができた。次はこれをJenkinsで出力する。

Cobertura PluginでJenkins上でカバレッジ結果を見る

まずは、Cobertura PluginをJenkinsにインストールする。

[Jenkinsの管理] > [プラグインの管理] から Cobertura Pluginを選択して、インストール。

カバレッジ出力するための設定は、[設定] > [ビルド] で、gcovrのコマンドを追加する。

ちなみに、Windowsバッチコマンドだと以下のようなコマンドを追加したら動いた。 gcovrの前にpython2.6.exeを入れると動くが、 gcovrだけだったり、python gcovrだと動作しなかったりするのがナゾ。

python2.6.exe gcovr --xml --output=gcovr_result.xml src/

[ビルド後の処理] に [Cobertura カバレッジレポートの集計] という項目が追加されているので、選択。

Cobertura XMLレポート パターンという項目に、xmlファイル名を追加する。

(カスタムワークスペースを設定していない場合はパスも込で)

image

これで、ビルドを実行すればカバレッジが表示される。

カバレッジ表示結果

プロジェクト画面に[カバレッジレポート]という画面が現れる。

カバレッジはここで見ることができる。

image