2011-10-13 25 views
6

私のC++プログラムでは、多くのCPUを消費しています。私は、CPUの使用率をプロファイリングするために、Googleのパフォーマンスツールを使用し、これは私が得たものである:Googleのperfツールのアドレスを解釈する方法CPUプロファイラ

(pprof) top 
Total: 1343 samples 
    1330 99.0% 99.0%  1330 99.0% 0x0000000801dcb11c 
     7 0.5% 99.6%  7 0.5% 0x0000000801dcb11e 
     4 0.3% 99.9%  4 0.3% program::threadWorker 
     1 0.1% 99.9%  1 0.1% 0x0000000801dcb110 
     1 0.1% 100.0%  1 0.1% 0x00007fffffffffc0 

しかし、1つだけここに示した5つの工程のうち、実際の関数名です。残りはアドレスです。どのようにしてこれらのアドレスが関係しているのかを知ることができますか?

編集(もちろん、私は、上に示した最初のアドレスの中で最も興味を持っています):これは私がプロファイラを実行する方法である:

env CPUPROFILE=prof.out ./a.out 
[kill program] 

pprof ./a.out prof.out 

また、私はコード検査によって根本的な原因を発見しました。しかし、プロファイラが住所ではなく犯人の機能を特定することは、依然として素晴らしいことです。

答えて

2

google-pprofで結果を読み込むときに実行可能ファイルを指定していない可能性がありますか?

私はそれを実行します。

$ google-pprof executable /tmp/executable.hprof --text | less 

とうまく機能名を見ることができます。または、それらのメソッドは、あなたがgoogle-pprofを実行するときにあなたのパスにない共有ライブラリの一部にありますか?

+0

プロファイラをどのように実行したかを私の質問に編集しました。私は、共用ライブラリからではなく、同じファイルで宣言された原因を見つけました。 – jules

+0

@jules:プロファイラが原因を見つけるのに役立ちましたか? –

+0

@Mike Dunlavey:いいえ、私のプログラムはかなり小さいので、コード検査で見つけました。 – jules

関連する問題