autotools で make check を実装する方法(その3):valgrind を組み込んでメモリリークを検出する

前回のエントリの続きです


メモリリークの検出ツールである valgrind を使って、メモリリークに関するテストを自動化します.

autotools や make check に関する基礎情報は前回のエントリを参照してください.本エントリでは差分だけ記載します.

make check にvalgrind を組み込む方法

configure.ac に1行

AX_VALGRIND_CHECK

tests/Makefile.am に1行

@VALGRIND_CHECK_RULES@

の合計2行を加えるだけで valgrind を使ったメモリリークのチェックがテストケースに加わります.

テストケースの実行は

$ make valgrind-check

とします

テストケースは並列に実行することも出来ます.たとえば10並列でテストしたい場合は

$ make valgrind-check -j 10

とします

補足情報

補足情報:AX_VALGRIND_CHECK  マクロについて

AX_VALGRIND_CHECK は m4 のマクロで,環境によってはマクロがインストールされていない場合があります.

マクロの展開時,つまり autoreconf などの実行時に

autoreconf -vfi 

エラーが出る場合は,以下の方法で マクロを入手します

ax_valgrind_check.m4 のダウンロード

https://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html で配布されています

マクロの配置

m4というディレクトリを作成して ax_valgrind_check.m4 を保存します

configure.ac の更新

一行

AC_CONFIG_MACRO_DIR([m4])

を加えます

autoreconf -vfi の再実行

エラーがでなくなれば成功です

補足情報:AX_VALGRIND_CHECK のカスタマイズ

AX_VALGRIND_CHECKマクロを使うと configure に以下のオプションが登場するようになります

オプション 意味
--enable-valgrind valgrind の利用のOn/Off
--enable-valgrind-memcheck valgrind のmemcheckモジュールのOn/Off
--enable-valgrind-helgrind valgrind のhelgrindモジュールのOn/Off
--enable-valgrind-drd valgrind のdrdモジュールのOn/Off
--enable-valgrind-sgcheck valgrind のsgcheckモジュールのOn/Off

valgrind には様々なモジュール(memcheckやhelgrind)があります.それぞれのオプションのデフォルト値を変更したい場合は

configure.ac で AX_VALGRIND_DFLTマクロを使って

AX_VALGRIND_DFLT(memcheck, on)
AX_VALGRIND_DFLT(helgrind, off)
AX_VALGRIND_DFLT(drd, off)
AX_VALGRIND_DFLT(sgcheck, off)

などとします.

補足事項: valgrind が有効にならない場合

AX_VALGRIND_CHECK マクロはconfigure 時にvalgrind のインストール状況をチェックしています.

valgrind がインストールされていない環境,そもそもvalgrindが対応していない環境(AppleのM1など)では,make valgrind-check は無効になります.