読者です 読者をやめる 読者になる 読者になる

gprof de profile

Linux

昔のメモで詠ってみる。突っ込まないでね。

  1. 要点
    • gccでプログラムをプロファイリングする為にはgprofを使う。
    • makeファイルの『CFLAGS』や『CXXFLAGS』や『LDFLAGS』に-pgオプションをつけてビルドする。
    • 普通に実行して無事プロファイルできていると『gmon.out』というファイルができているはず。
    • gmon.outはそのままでは読めないので、ここで始めて『gprof』を使う。

$> gprof (実行ファイル) gmon.out

    • 『gprof』で吐き出された結果をファイルにリダイレクトして読む。
    • gccでコンパイルする場合は-lmオプション(mathライブラリ)をつけないとリンクエラーになる。

※詳細は以下のリンク先を参照のこと。

  1. Linux de プロファイル 超お役立ちサイト

http://www.linux.or.jp/JM/html/GNU_binutils/man1/gprof.1.html
http://limu.is.kyushu-u.ac.jp/~yosimoto/memo/kondara/gprof.html

  • "gmon.out file is missing call-graph data" というエラーが出る場合は、

必要なライブラリすべてに-pgがついているかどうか再確認。

このままだと、鬼の様にログが吐き出されるので、ファイルにリダイレクトするか、パイプを通してlessコマンドで見る。

$> gprof -b (exe) gmon.out | less

LDFLAGSに"-pg"オプションをつけ忘れることがよくあるので、注意してください.
exeだけに-pgオプションをつけても動きますが、ライブラリにも-pgオプションをつけてコンパイルすると、オプションをつけたものに関してのみ、Call graph(関数の親子関係の表示)が表示されます。余計なものには-pgオプションをつけないようにしたほうがよいです。
なお、Call graphを表示したくない時は、gprof時に--briefオプションをつければよいそうです。
http://www3.starcat.ne.jp/~matsu/feature/learn-gdb/profile.html