【问题标题】:gperftools not showing call graph resultsgperftools 不显示调用图结果
【发布时间】:2016-12-29 07:05:03
【问题描述】:

我已经安装了 gperftools 并收集了数据,目前看来这很合理。我看到一个节点(?)被大量采样 - 但我对该节点的调用者感兴趣 - 我没有看到它们?我也试过 callgrind/kcachegrind,我觉得我错过了什么?这是使用--text时输出的sn-p

Total: 1844 samples
     573  31.1%  31.1%      573  31.1% US_strcpy
     185  10.0%  41.1%      185  10.0% US_strstr
     167   9.1%  50.2%      167   9.1% US_strlen
      63   3.4%  53.6%       63   3.4% PS_CompressTable
      58   3.1%  56.7%       58   3.1% LX_LexInternal
      51   2.8%  59.5%       51   2.8% US_CStrEql
      47   2.5%  62.0%       47   2.5% 0x40472984
      40   2.2%  64.2%       40   2.2% PS_DoSets
      38   2.1%  66.3%       38   2.1% LX_ProcessCatRange

所以我有兴趣看到 US_strcpy 的调用者,但我似乎没有?我确实从 kcachegrind 获得了 0x40472984 的漂亮调用图(仍在尝试将其与符号匹配)

【问题讨论】:

  • 取十个或二十个样本this way。对于任何占用大量时间的函数,它都会准确地告诉谁调用它,以及为什么调用它。第 3 点 here 讨论调用图。

标签: profiling pprof gperftools


【解决方案1】:

有几种方法:

a) pprof --web 或 kcachgrind 如果被正确捕获,将很好地向您显示调用者。有时执行 pprof --traces 很有用(仅适用于 github.com/google/pprof 版本)。这有点像 Mike 上面提到的低技术方法。

b) 如果数据确实不可用,则说明堆栈跟踪捕获和/或符号化存在问题。为此,请使用 libunwind 构建 gperftools,并使用调试信息构建您的所有程序。

【讨论】:

    猜你喜欢
    • 2022-10-21
    • 2017-10-19
    • 2019-10-03
    • 2019-04-20
    • 2021-03-31
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多