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
- 1. Interpretowanie danych wyjściowych --ptxas-options = -v
- 2. Interpretowanie wyjścia StringToWordVector() - Weka
- 3. Interpretowanie usterek błędu gfortran
- 4. Jak wymusić zwiększenie :: asio, aby nadać priorytet wywoływaniu połączeń async_write przez uruchamianie innych programów obsługi?
- 5. Interpretowanie wyjścia strace
- 6. Interpretowanie wyjścia jednostki PHP
- 7. Zapytanie o wybrać System połączeń
- 8. Optymalizowanie połączeń z bazami danych
- 9. Zapobieganie wywoływaniu metody przed innym
- 10. Yii wiele połączeń z bazami danych
- 11. Interpretowanie "\ n" w printf ("% s", ciąg)
- 12. Interpretowanie zwracanej wartości funkcji bezpośrednio jako tablicy
- 13. Interpretowanie informacji GPU z Process Explorer
- 14. Dlaczego kompilator .NET JIT miałby decydować o nieinwazyjnym lub optymalizującym wywoływaniu połączeń wychodzących do pustych metod statycznych, które nie mają skutków ubocznych?
- 15. Dlaczego zwracanie wartości false w wywoływaniu zwrotnym o kluczowym znaczeniu nie zatrzymuje zdarzenia kliknięcia przycisku?
- 16. Java zapobiega wywoływaniu prywatnych lub chronionych metod poza klasą
- 17. Układanka o strukturze danych
- 18. Przekazywanie połączeń
- 19. PHP: Symulacja wielu połączeń MySQL z tą samą bazą danych
- 20. wiele połączeń z bazą danych z has_many przez
- 21. o zmiennej liczbie argumentów szablonu klasy bazowej przekazywanie połączeń
- 22. Zbudowanie konfiguracji Wifi z ScanResult lub: Interpretowanie łańcucha 'Możliwości' ScanResult
- 23. Jak zarządzać pulą połączeń z bazą danych na wiosnę jpa?
- 24. Wiele połączeń w Codeigniter
- 25. Najlepsza praktyka dla lokalnego zakresu zmiennych w wywoływaniu C++
- 26. JavaScript OOP - zgubiłem to w asynchronicznym wywoływaniu zwrotnym
- 27. Jak znaleźć to, co używa połączeń w mojej puli połączeń
- 28. Jak określić liczbę połączeń wymaganych w puli połączeń?
- 29. Pula połączeń lub źródło danych? Co powinienem umieścić w JNDI?
- 30. PHP/MYSQL - Wiele połączeń z tą samą bazą danych?
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