【问题标题】:How to interpret addresses in Google perf tools CPU profiler如何在 Google perf 工具 CPU 分析器中解释地址
【发布时间】:2011-12-07 02:46:40
【问题描述】:

我的 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

另外,我通过代码检查找到了根本原因。但让探查器精确定位罪魁祸首函数而不是地址仍然会很好。

【问题讨论】:

    标签: c++ profiling google-perftools


    【解决方案1】:

    在 google-pprof 中加载结果时是否可能没有指定可执行文件?

    我运行它:

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

    并且可以很好地看到函数名称。或者当您运行 google-pprof 时,这些方法位于某个共享库中而不是您的路径中?

    【讨论】:

    • 我编辑了我的问题以包括我如何运行分析器。我找到了罪魁祸首函数,它是在同一个文件中声明的,而不是从共享库中声明的。
    • @Mike Dunlavey:不,我是通过代码检查发现的,因为我的程序很小。
    • @jules:你可能想try this
    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 2017-10-21
    • 2018-02-21
    • 2013-11-14
    • 2013-07-18
    • 2017-02-08
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多