2016-08-22 107 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,並用調試信息構建所有程序。