2016-08-22 14 views
0

gperftools를 설치하고 데이터를 수집하고 있습니다. 하나의 노드 (?)가 많이 샘플링되는 것을 보았습니다. 그러나 그 노드의 호출자에게 관심이 있습니다 - 나는 그들을 보지 못합니까? 나는 callgrind/kcachegrind도 시도해 보았습니다. 뭔가 빠진 것 같은 기분이 들었습니까? gperftools가 콜 그래프 결과를 표시하지 않음

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에 발신자를보고 관심이 있어요,하지만 난 어떤을하지 않는 것 --text 사용하는 경우 여기에 출력의 조각이야? 나는 0x40472984

+0

10 개 또는 20 개의 샘플을 가져옵니다 (*이 방법 *) (http://stackoverflow.com/a/378024/23771). 상당한 시간을 차지하는 모든 기능에 대해서는 누가 그것을 부르는지, 그리고 그 이유를 정확하게 알려줍니다. 포인트 3 [* 여기 *] (http://stackoverflow.com/a/1779343/23771) 콜 그래프에 대해 설명합니다. –

답변

0

여러 가지 방법이 있습니다 (여전히 기호에 일치하도록 시도)에 대한 kcachegrind에서 좋은 콜 그래프를받을 수 있나요 :

A) pprof --web 또는 경우 kcachgrind 멋지게 당신에게 발신자 표시됩니다 올바르게 캡쳐되었습니다. 때로는 pprof --traces를 수행하는 것이 유용합니다 (github.com/google/pprof 버전에서만 사용 가능). 마이크가 위에서 언급 한 저급 기술 방식과 다소 비슷합니다.

b) 데이터를 실제로 사용할 수없는 경우 스택 추적 캡처 및/또는 상징화에 문제가있는 것입니다. 이를 위해 libunwind로 gperftools를 빌드하고 디버그 정보로 모든 프로그램을 빌드하십시오.