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ń
Odpowiedz
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>
Interesujące. Czy wygenerowany wykres jest czytelny dla 1500 funkcji? –
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
czy powinniśmy faktycznie wpisać '-T
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
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. –
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