MacOSX Yosemiteでプロファイラを実行する
最近Mac上でC++を書いている。
プロファイラをかけようと思ったが意外に上手く行かなかったのでメモ。
上手くいった奴
上手く行かなかった奴
gperftools
g++ -lprofiler main.cpp
a.outが生成される。
a.profにプロファイル情報を吐くようにする。
CPUPROFILE=a.prof ./a.out
CPUPROFILE=a.profと./a.outを別々に実行するとa.profが生成されなかった。
このプロファイル結果をpprofでみるのだが、メソッド名が16進の文字列になる。
pprof a.out a.prof
原因はASLRにあるらしい。
コンパイル時に-Wl,-no_pieを追加。
これにより一部のメソッド名は正しく表示されるが大半は16進のまま。
そもそも呼んでないメソッド名が処理されていることになっているのでちょっとダメっぽい。
OS X Lion Heap profiling requires disabling Position Independent Executable · Issue #363 · gperftools/gperftools · GitHub
OS X requires disabling Position Independent Executable · Issue #565 · gperftools/gperftools · GitHub