MacOSXでいくつかのC++プログラムのプロファイルを作成しようとしています。だから私はgoogle-perftools
を構築し、-g
コンパイラフラグを持つMacPorts g ++ 4.7を使ってコンパイルし、libprofiler
にリンクしたプログラムを書いた。それから私は走った:MacOSXのGoogle Perfools CPUプロファイラの行番号
CPUPROFILE=cpu.profile ./a.out
それから私は、出力を生成するpprofを走っ:
[hidden ~]$ pprof --text ./a.out cpu.profile
Using local file ./a.out.
Using local file cpu.profile.
Removing __sigtramp from all stack traces.
Total: 282 samples
107 37.9% 37.9% 107 37.9% 0x000000010d72229e
16 5.7% 43.6% 16 5.7% 0x000000010d721a5f
12 4.3% 47.9% 12 4.3% 0x000000010d721de8
11 3.9% 51.8% 11 3.9% 0x000000010d721a4e
9 3.2% 55.0% 9 3.2% 0x000000010d721e13
8 2.8% 57.8% 8 2.8% 0x000000010d721a64
7 2.5% 60.3% 7 2.5% 0x000000010d7222f0
6 2.1% 62.4% 6 2.1% 0x000000010d721a4c
6 2.1% 64.5% 6 2.1% 0x000000010d721b1f
6 2.1% 66.7% 6 2.1% 0x000000010d721e0c
5 1.8% 68.4% 5 1.8% 0x000000010d721fba
......
perftoolsはアドレスが関数名を変換しないように見えます。
私がここで紛失していることを知っている人はいますか?プロファイラが正しい結果を生成できるようにするにはどうすればよいですか。
EDIT:詳細:pprofやgoogle-perftoolsの問題ではなく、gccやmacosxのようなものです。これは、Instrument.appも行番号の代わりにアドレスを表示するためです。私はデバッグシンボルがMac OS Xでどのように動作するかに精通していないので、gccやMac OS Xのバグではなく、むしろここで欠けていると思うでしょう。誰でもデバッグ情報の仕組みに関するヒントMac OS X用
"私はプロファイルの一部のC++プログラムを試しています"次に、なぜこの質問をCとタグ付けしますか? –
この問題はC++だけでなくCにも当てはまりません。 –
私はOS Xの開発者やgoogleperfに慣れていませんが、以前はプロファイリング用のライブラリを使用していましたが、デバッグ用の-gフラグも使用しました。コンパイラとリンカに-pフラグを追加してプロファイリングの詳細を取得します。 – fduff