JenkinsのValgrind Pluginを使ってみる


Table of Contents

1 Valgrind Pluginとは

Valgrindを実行し、Jenkins上で結果を閲覧するプラグインです。

Valgrindの実行をValgrind Pluginに任せても独自に実行しても構いません。

2 valgrindのインストール

テスト実行環境にvalgrindをインストールします。Debian 8なのでapt-getでインストールします。

$ sudo apt-get install -y valgrind

3 Valgrind Pluginのインストール

Jenkinsのプラグイン制御画面からインストールします。

Jenkinsの管理 -> プラグインの管理 -> 利用可能

https://dl-web.dropbox.com/s/quu7bu5m6zl7nro/0001_Valgrind-Install.png

4 システムの設定

システムの設定のValgrind PublisherでValgrind検出箇所で表示するソースコードの行数を指定します。

Jenkinsの管理 -> システムの設定 -> Valgrind Publisher

https://dl-web.dropbox.com/s/0udflthmn2tjzf9/0002_Valgrind-Publisher-System.png

 

Stacktrace, prefix lines of code Valgrind検出箇所で表示する前部分の行数 Stacktrace, suffix lines of code Valgrind検出箇所で表示する後部分の行数

 

5 ジョブの設定

5.1 ビルド手順の追加(Run Valgrind)

Run Valgrindでvalgrindの挙動を制御します。

https://dl-web.dropbox.com/s/i0l5w914so348l6/0003_RunValgrind-Setting.png

主だったパラメータは以下の通りです。

 

Executable Include Pattern valgrindを実行するプログラム名(パターンマッチング) Executable Exclude Pattern valgrindを実行しないプログラム名(パターンマッチング) File Ending valgrind実行結果を保存するファイルのアペンディクス

 

Executable Include Patternに指定したパターンにマッチするプログラムに全てついてvalgrindが実行されます。

例えば、memleak1とmemleak2というプログラムがあった場合、memleak*を指定します。

 

Executable Exclude PatternはExecutable Include Patternの結果から除外するパターンを指定します。

例えば、memleak1とmemleak2というプログラムは実行したいが、memleak1.cとmemleak2.cを除外する場合は*.cを指定します。

 

File Endingに.valgrind.xmlを指定すると各プログラムに対して、以下の名前のxmlファイルにvalgrind実行結果が保存されます。

<program>.<pid>.valgrind.xml

5.2 ビルド後の処理の追加(Publish Valgrind results)

Report PatternにFile Endingで作成されたファイル名のパターンを指定します。

パターンではなく完全一致でも問題ありません。

https://dl-web.dropbox.com/s/gf2hjgs21lq0bg1/0004_Publish-Valgrind-Results.png

5.3 ビルド手順の追加(独自の手順)

Run Valgrindは若干柔軟性に欠けるので(ディレクトリ変更に対応できない等)、独自にシェルスクリプトを実行してxmlファイルを出力しても良いでしょう。

以下のコマンドは/var/lib/jenkinsディレクトリ配下でJenkinsを動作させ、Run Valgrindの実行した場合と同等です。

$ valgrind –tool=memcheck –leak-check=full –show-reachable=no –undef-value-errors=no –track-origins=no –child-silent-after-fork=no –trace-children=no –gen-suppressions=no –xml=yes –xml-file=/var/lib/jenkins/jobs/a/workspace/memleak.%p.valgrind.xml /var/lib/jenkins/jobs/a/workspace/memleak

6 コンソール出力

memleakというプログラムに対して、コンソールに以下のように出力されました。

$ valgrind –version[Valgrind] detected valgrind version (valgrind): 3.10.0[Valgrind] includes files: memleak[Valgrind] working dir: /var/lib/jenkins/jobs/a/workspace[workspace] $ valgrind –tool=memcheck –leak-check=full–show-reachable=no –undef-value-errors=no –track-origins=no–child-silent-after-fork=no –trace-children=no–gen-suppressions=no –xml=yes–xml-file=/var/lib/jenkins/jobs/a/workspace/memleak.%p.valgrind.xml/var/lib/jenkins/jobs/a/workspace/memleak[Valgrind] valgrind exit code: 0[Valgrind] Files to copy:[Valgrind] memleak.16916.valgrind.xml[Valgrind] Copying memleak.16916.valgrind.xml to/var/lib/jenkins/jobs/a/builds/1/valgrind-plugin/valgrind-results/memleak.16916.valgrind.xml[Valgrind] Analysing valgrind results[Valgrind]’/mnt/valgrind-3.10.0/coregrind/m_replacemalloc/vg_replace_malloc.c’does not exist, source code won’t be available[Valgrind] copying source file’/var/lib/jenkins/jobs/a/workspace/memleak.c’ to ‘source_2.tmp’…[Valgrind] workspacePath: /var/lib/jenkins/jobs/a/workspace/[Valgrind] Ending the valgrind analysis.

7 結果

Valgrind実行結果のグラフを見ることができます。

https://dl-web.dropbox.com/s/7yqsv7x8lsu51r9/0005_Valgrind-Trend.png

Valgrind実行結果の詳細も見ることができます。

https://dl-web.dropbox.com/s/se3il16m2peifcw/0006_Valgrind-Detail.png

Android | Linux | SDL - Narrow Escape