How to interpret addresses in Google perf tools CPU profiler

风流意气都作罢 提交于 2019-12-04 20:59:46

问题


My C++ program is consuming a lot of CPU, and more so as it runs. I used Google Performance Tools to profile CPU usage, and this is what I got:

(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

However, only 1 out of the 5 processes shown here is an actual function name; the rest are addresses. How can I find out what these addresses pertain to? (Of course, I am most interested in the first address shown above)

Edit: This is how I ran the profiler:

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

pprof ./a.out prof.out

Also, I found the root cause by code inspection. But it would still be nice to have the profiler pinpoint the culprit function rather than an address.


回答1:


Is it possible you haven't specified the executable when loading the results in google-pprof?

I run it as:

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

and can see the function names just fine. Or that those methods are in some shared library not in your path when you run google-pprof?



来源:https://stackoverflow.com/questions/7757175/how-to-interpret-addresses-in-google-perf-tools-cpu-profiler

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!