2016-08-22 133 views
0

我已经安装了gperftools并收集数据,目前看起来是合理的。我看到一个节点(?)被抽样了很多 - 但我对那个节点的调用者感兴趣 - 我没有看到它们?我也试过callgrind/kcachegrind,我觉得我错过了什么?使用--textgperftools没有显示调用图结果

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(仍在试图匹配的符号)

+0

以十或二十个样本[*这种方式*](http://stackoverflow.com/a/378024/23771)。对于占用大量时间的任何功能,它都会明确指出是谁调用它以及为什么。第3点[* here *](http://stackoverflow.com/a/1779343/23771)讨论调用图。 –

回答

0

有几种方法:

一)pprof --web或kcachgrind将很好地告诉你来电者,如果它是正确捕获。执行pprof - 跟踪(仅适用于github.com/google/pprof版本)有时很有用。这有点像迈克上面提到的低科技方法。 b)如果数据真的不可用,那么您遇到堆栈跟踪捕获和/或符号化问题。为此,使用libunwind构建gperftools,并用调试信息构建所有程序。