gprof de profile
昔のメモで詠ってみる。突っ込まないでね。
- 要点
- gccでプログラムをプロファイリングする為にはgprofを使う。
- makeファイルの『CFLAGS』や『CXXFLAGS』や『LDFLAGS』に-pgオプションをつけてビルドする。
- 普通に実行して無事プロファイルできていると『gmon.out』というファイルができているはず。
- gmon.outはそのままでは読めないので、ここで始めて『gprof』を使う。
$> gprof (実行ファイル) gmon.out
-
- 『gprof』で吐き出された結果をファイルにリダイレクトして読む。
- gccでコンパイルする場合は-lmオプション(mathライブラリ)をつけないとリンクエラーになる。
※詳細は以下のリンク先を参照のこと。
- 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