前回のエントリの続きです
メモリリークの検出ツールである 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 は無効になります.