本文へスキップ

Valgrindとは?

ばるぐりんど

Valgrindとは、プログラムメモリ使用をランタイムで動的解析するフレームワークで、メモリリークや不正なメモリアクセスの検出に使われます。

Valgrindは、2002年にジュリアン・シューアードが開発したプログラム解析フレームワークです。Linux・macOS・Solarisなどで動作し、C/C++プログラム中心メモリ管理の問題を実行時に検出するツールとして広く使われています。

Valgrindが検出できる主な問題は次のとおりです。

  • メモリリーク(確保したヒープ領域の解放忘れ)
  • 未初期化メモリの読み取り
  • 確保済み領域の範囲外アクセス(バッファオーバーフロー)
  • 解放済みメモリへのアクセス(use-after-free)
  • 二重解放(double free)

Valgrindは仮想CPUでプログラムを実行し、すべてのメモリアクセスを監視するため、通常実行と比べて10〜50倍程度遅くなります。そのため本番環境ではなくデバッグ・テスト環境で使うのが一般的です。

ValgrindはメインツールのMemcheckのほか、キャッシュプロファイリング(Cachegrind)、コールグラフ生成(Callgrind)、ヒープ解析(Massif)など複数のツールを含むフレームワークです。Address Sanitizer(ASan)などコンパイラ組み込みの代替ツールも普及していますが、再コンパイル不要で使えるValgrindは既存バイナリの解析に有用です。

使い方・例文

C++で書いたプログラムのメモリリークを調べたいときにvalgrind --leak-check=full ./myappのように実行すると、どこでメモリが確保されたまま解放されていないかを詳細に報告してくれます。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語