0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

valgrind resaerch memo

0
Last updated at Posted at 2025-09-26

なぜvalgrindは大事か?(http://mqiita.com/yusa_a/items/3d904919457d770b486a)

Valgrind実行の仕組み

  1. Valgrindコアが提供する合成CPU上で実行

  2. コアは選択されたツールにコードを渡す

  3. ツールは独自のインストルメンテーション(追加機能(プローブ)を挿入する技術)コードを追加し、その結果をコアに返します
    インストルメンテーションコード -> 単純なコード量が増えるため実行速度が遅い。

  4. コアは、インストルメントされたコードの継続的な実行を調ベる


プログラムが実行するすべての命令(掘れる限り)をシミュレートします

! エラーは報告された順に修正

1block = 1malloc


--leak-check : 詳細なメモリリーク検出機能がオン
--num-callers : スタックトレース(問題が発生した場所を示す)を大きくする

Conditional jump or move depends on uninitialised value(s)
->
--track-origins=yes : 初期化されていない値がどこから来ているのかを突き止める

-g : 関連するソースコード行を直接示す

-v : さらに詳しい情報

-Wall : 見逃す可能性のある問題の一部またはすべてを識別

--trace-children=yes : 用しているインタープリタに関するエラーレポートを非表示

--log-file=filename : 指定したファイルに書き込む


C++

-fno-inline : 関数呼び出しチェーンが見やすい
--read-inline-info=yes : インライン展開情報を記述したデバッグ情報


検知category

Valgrind の検知カテゴリ

メモリリーク関連

definitely lost
→ 参照が完全に失われたメモリ。確実なリーク。

indirectly lost
→ 参照元が lost になって巻き添えを食ったメモリ。

possibly lost
→ ポインタは残っているけど正しく参照できるかわからない。

still reachable
→ 解放されていないが、参照できるポインタが残っている。リークとはみなさない。

無効なメモリアクセス

Invalid read / Invalid write
→ malloc/free 領域の外を読んだり書いたりしている。

Use of uninitialized value
→ 値を設定していない変数を使った。

Conditional jump or move depends on uninitialised value(s)
→ 未初期化変数に基づいて if 分岐や演算をしている。

不正な free / 管理ミス

Invalid free() / delete / delete[]
→ malloc していない領域を free した、あるいは二重 free した。

Mismatched free() / delete
→ malloc した領域を delete したなど。

ファイルディスクリプタやスレッド系

Still open file descriptors
→ プログラム終了時に閉じてない FD がある。

Threading errors(Helgrind/DRDを使うと検知)
→ データ競合、ロックミスなど。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?