2012年10月17日 (水曜日)

07:15:21 # Life perf record でのコールグラフをC++でみてみる。 どうもomit frame pointer に対応していないっぽい。 amd64. -O0 だとコールグラフがでるけど-O2 だと出ないのでこれかなと思って -fno-omit-frame-pointerをつけるとコールグラフが出た。 spiritとか使っててファンクションオブジェクトとかテンプレートとか使いまくっているとインライン展開されるのでコールグラフに記録されないコードパスがありすぎて辛い。 -O1くらいだとソースコードと対応がとれている感じになる。 あと、テンプレート使いまくっているとテンプレートのパラメータがどれかという情報の途中で文字列の制限がくるっぽくてつらい。たとえば std::_Hashtable<boost::iterator_range<__gnu_cxx::__normal_iterator<char const*, std::string> >, std::pair<boost::iterator_range<__gnu_cxx::__normal_iterator<char const*, std::string> > const, int>, std::allocator<st d::pair<boost::iterator_range<__gnu_cxx::__normal_iterator<char const*, std::string> > const, int> >, std::_Select1st<std::pair<boost:: iterator_range<__gnu_cxx::__normal_iterator<char const*, std::string> > const, int> >, RangeEqualTo<boostgoogle-perftoolsのC++コードをうまく扱ってくれる具合と比べると雲泥の差。

Junichi Uekawa

$Id: dancer-diary.el,v 1.94 2009/10/21 14:02:48 dancer Exp $