2012-02-14 2 views
17

내 앱에 동적 호출 그래프가 필요합니다. callgrind 도구 (valgrind 슈트)로 실행하고 callgrind.out.xxxxx 파일을 받았습니다. 이제이 데이터를 그래픽으로 표현하고 싶습니다. KCacheGrind은 그래프의 제한된 부분을 그리기 때문에별로 도움이되지 않습니다 (프로필이 1500 개가 아닌 ~ 50 개의 함수가 그려지며이를 수정하는 방법을 모르겠습니다). 어떻게 모든 기능이 그려지는 그래프 이미지를 얻을 수 있습니까?콜그 그리드 데이터 해석

+0

포함되어 있습니까 gprof2dot 사용하고 계십니까? 또한 "자체"로 정렬하는 경우 나열되지 않은 함수에서 보낸 관련 시간/지침이 남아 있습니까? 관련 부분이 빠진 경우를 기억할 수 없습니다. –

+0

예, callgrind.out에는 필요한 모든 데이터 (그래프에 누락 된 기능 포함)가 포함되어 있으며 그래프에 나열되지 않은 대부분의 기능에는 관련 시간/지침이 있습니다. 왜'KCacheGrind'가 그것의 일부만을 뽑는 지 모르겠다. UPD : 함수 목록에서 원하는 함수를 선택하면 (기본값 'KCacheGrind' 레이아웃의 왼쪽에 위치) 그래프가 다시 그려져이 함수가 표시되지만 다른 함수는 누락됩니다. 한 번에 전체 그래프가 필요합니다. 미리 감사드립니다. – maverik

답변

22

좋아, 나는 그 길을 발견했다. 생성 된 callgrind.out 파일은 gprof2dot을 사용하여 dot 파일로 변환 할 수 있습니다 (예,이 도구는 callgrind 파일도 구문 분석 할 수 있음). 그리고 당신이 생성하려면 다음 명령을 사용하여 dot -T<type> dotfile.dot -o graphfile.<type>

+0

흥미 롭습니다. 생성 된 그래프를 1500 개의 함수에 대해 읽을 수 있습니까? –

+0

사실 두 개의 서로 다른 버전의 소프트웨어에서 두 개의 그래프를 비교해야하기 때문에 그래프 전체를 읽고 이해할 수는 없으며 일부 경로 만 있으면 어디에서 찾아야하는지 알 수 있습니다. OTOH, 생성 된'png' 이미지는 내 Core i7-2600 3.4GHz/8Gb DDR3에서 약 5 분이 걸린 결과 파일의 크기는 23 메가 바이트입니다. 모든 이미지 뷰어가 빠르고 정확하게 처리 할 수있는 것은 아닙니다 (완벽한 스트레스 테스트 IMO :)) – maverik

+0

실제로 '-T '을 입력해야합니다? 또는 ''을 무언가로 대체합니까? – nmz787

16

를 사용하여 그래프 이미지를 얻을 수 있습니다 graph.png callgrind.out 그래프에서 누락 된 데이터를

$./gprof2dot.py --format=callgrind --output=out.dot /tmp/cachegrind.out.1360843301.16101 

$dot -Tpng out.dot -o graph.png