忍者ブログ
日々の研究生活のメモ書きなど
コマンドの例
hogeが実行コマンド
valgrind -v -v --error-limit=no --leak-check=full --tool=memcheck --show-reachable=no hoge

出力を記録しておきたいなら@tcsh
valgrind -v -v --error-limit=no --leak-check=full --tool=memcheck --show-reachable=no hoge >& val_err.txt
-vと2回書いてるのはより情報を出力するため

--error-limit はデフォルトだとyes
エラー報告の数を1000くらいで打ち切るオプションなので、これを外してすべてのエラーを出力する

--leak-check=full は必要

--tool=memcheck はvalgrindで使えるツールのうちどれを使うか指定する
このオプションがない場合もデフォルトでmemcheckが選ばれるのでなくてもいい

--show-reachable=no
確保された領域が解放されないままプログラムがabortした場合に検出される? わからん




コンパイル時に CFLAGS="-g -O0" のようにしてコンパイルオプションを追加しておく
-gはデバッグ関連(行番号とか)の情報を実行ファイルに入れておくオプション
-O0は本来-O2とかするところを、最適化しないようにしてコンパイルする
最適化してしまうと、順番とかが実行される変わる可能性があるかららしい

これをしておくと、valgrindのエラー出力の表示に関数名やコードの何行目かが表示されるので、バグ取りがとてもしやすくなる
逆にないと、とてもつらい・・・





ワーニング、エラーメモ

■ Warning: set address range perms: large range
大きいサイズのメモリ確保をしたとき


■ memcheck GC: 1000 nodes, 55 survivors (5.5%)
これは自分のコードには関係なくて、memcheckの性能を示すものらしい
バグ取りには関係ないので無視


■ メモリリークの例
==224793== 704,643,072 bytes in 1 blocks are possibly lost in loss record 1,312 of 1,312
==224793== at 0x4C2BC3C: memalign (vg_replace_malloc.c:857)
==224793== by 0x4C2BD01: posix_memalign (vg_replace_malloc.c:1020)
==224793== by 0x4E47325: HOGE (my_malloc.c:38)
==224793== by 0x4E475A0: HOGE (my_malloc.c:123)
==224793== by 0x4031E2: main (coinc.c:347)
-g -O0を付け加えてコンパイルしてるとこんな感じで情報が出てくる
実際はHOGEとかmy_malloc.cとかは別の名前なので適当に差し替えておきました

valgrindで実行ファイルを動かした場合は、メモリ確保の関数とかが通常のライブラリのではなく
valgrindのライブラリのものが用いられるっぽい
例えばposix_memalignとか


■ メモリの不正アクセスの例
==224793== Invalid read of size 8
==224793== at 0x4121D2: zpk2sos (iir.c:845)
==224793== by 0x4126BE: iir_design_sos (iir.c:1029)
==224793== by 0x404A12: main (coinc.c:509)
==224793== Address 0x187b0e28 is 8 bytes after a block of size 304 alloc'd
==224793== at 0x4C2B955: calloc (vg_replace_malloc.c:711)
==224793== by 0x4117DC: zpk2sos (iir.c:746)
==224793== by 0x4126BE: iir_design_sos (iir.c:1029)


参考になりそうなページ

■ 参考 : Using and understanding the Valgrind core(valgrindの公式ドキュメント)

■ 参考 : Valgrindの結果の見方、日本語訳、など役に立つことまとめ

■ 参考 : Valgrindの使い方







ちょっと関係ないけど、もし動的メモリを2回freeしてしまうとエラーになる

このエラーの箇所を探すコツを↓の記事で見かけたのでメモ

■ 参考 : double freeバグのデバッグ.



実行ファイルに対して、以下のコマンドを実行するとコマンドのバイナリファイルがどういう順で何を実行するのか見える
逆アセンブルとかいうらしい(なにかに使えるかもしれないのでメモ)
objdump -D a.out | more











PR
この記事にコメントする
Name
Title
Color
E-Mail
URL
Comment
Password   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST

print "生きてます"
print "コロナのせいで15万くらい損失出してますが、生きてます"

# 最終更新 2020/03/15
カウンター
カウンター カウンター
ブログ内検索
ツイートするボタン
リンク
相互リンク募集中です (Twitterにてお知らせください)

Demo scripts for gnuplot version 5
(gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)

gnuplotスクリプトの解説
(米澤進吾さんの個人ページ、gnuplotと言えばこのかた)

gnuplot のページ
(Takeno Lab、うちのブログがリンクされていたのでリンク返し)

とある物理の院生日誌~院生は社会へ旅立った~
(研究室の先輩の個人ブログ)

英語例文を見て自然に英語・英会話を学ぶ
(楠本慶ニさんの個人ページ、様々な情報の密度の高さに感動)

Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco
(映画の感想をまとめられるサイト、いつもお世話になっています)

Astronomy Picture of the Day Archive
(天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)

今日のほしぞら
(任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)

GNUPLOTとアニメーション
(応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)

読書メーター
(読んだ本をリストできる便利なサイト)

flickr難民の写真置き場
(20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)

教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定
(阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)

英語論文執筆用の例文検索サービス
(とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)


Template "simple02" by Emile*Emilie
忍者ブログ [PR]