7

私の C++ プログラムは大量の CPU を消費しており、実行するとさらに消費します。Google Performance Tools を使用して 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

ただし、ここに示されている 5 つのプロセスのうち、実際の関数名は 1 つだけです。残りはアドレスです。これらのアドレスが何に関係するかを知るにはどうすればよいですか? (もちろん、私が最も興味を持っているのは、上記の最初のアドレスです)

編集:これは私がプロファイラーを実行した方法です:

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

pprof ./a.out prof.out

また、コードインスペクションで根本原因を突き止めました。しかし、プロファイラーがアドレスではなく原因関数を正確に特定できるようにするとなお良いでしょう。

4

1 に答える 1

2

結果をgoogle-pprofにロードするときに実行可能ファイルを指定していない可能性はありますか?

私はそれを次のように実行します:

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

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

于 2011-10-13T17:33:20.513 に答える