2012-02-14 29 views
17

Potrzebuję wykresu połączeń dynamicznych dla mojej aplikacji. Uruchomiłem go za pomocą narzędzia callgrind (valgrind) i otrzymałem plik callgrind.out.xxxxx. Teraz chcę zrobić graficzną reprezentację tych danych. KCacheGrind nie pomaga mi, ponieważ rysuje ograniczoną część wykresu (rysuje ~ 50 funkcji zamiast ~ 1500 profilowanych i nie wiem jak to naprawić). Jak mogę uzyskać obraz wykresu, na którym zostaną narysowane wszystkie funkcje?Interpretowanie danych o wywoływaniu połączeń

+0

Czy callgrind.out zawierać dane, że brakuje na wykresie? Ponadto, jeśli sortujesz według "siebie", czy jest odpowiedni czas/instrukcje, które zostały wydane na funkcje, które nie są wymienione? Nie pamiętam przypadku, w którym pominięto odpowiednie części. –

+0

Tak, callgrind.out zawiera wszystkie potrzebne dane (w tym funkcje, których brakuje na wykresie), a większość funkcji, które nie są wymienione na wykresie, ma odpowiedni czas/instrukcje. Nie wiem, dlaczego 'KCacheGrind' rysuje tylko jego część. UPD: jeśli wybiorę pożądaną funkcję na liście funkcji (umieszczonej po lewej stronie w domyślnym układzie "KCacheGrind"), wykres zostanie przerysowany, aby wyświetlić te funkcje, ale nadal brakuje innych. Potrzebuję całego wykresu naraz. Z góry dziękuję. – maverik

Odpowiedz

22

Ok, znalazłem sposób. Wygenerowany plik callgrind.out można przekonwertować na plik dot za pomocą gprof2dot (tak, to narzędzie może również parsować pliki callgrind). A następnie można uzyskać obraz wykresu przy użyciu dot -T<type> dotfile.dot -o graphfile.<type>

+0

Interesujące. Czy wygenerowany wykres jest czytelny dla 1500 funkcji? –

+0

Umowa polega na tym, że muszę porównać dwa wykresy z dwóch różnych wersji oprogramowania, więc nie ma sensu czytać/rozumieć całego wykresu, potrzebuję tylko kilku ścieżek i wiem, gdzie powinienem ich szukać. OTOH, generowanie obrazu 'png' zajmuje około 5 minut na moim' Core i7-2600 3.4 GHz/8 Gb DDR3', a rozmiar pliku wynikowego wynosi 23 MB. Nie wszystkie przeglądarki obrazów potrafią obsłużyć je szybko i poprawnie (doskonały test warunków skrajnych IMO :)) – maverik

+0

czy powinniśmy faktycznie wpisać '-T '? lub czy zastąpimy '' coś? – nmz787

16

pomocą następującego polecenia do generowania graph.png użyciu gprof2dot

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

$dot -Tpng out.dot -o graph.png 
Powiązane problemy