Jak zainstalować gprof na OS X

Próbuję użyć gprof do profilowania aplikacji c++, którą napisałem, ale nie mogę na całe życie rozgryźć, jak ją pobrać i zainstalować. Wygooglowałem wszystko, co przychodzi mi do głowy i nie mogę nawet znaleźć linku do pobierania. Niech ktoś mi pomoże!

Author: zaloo, 2014-03-25

3 answers

Wygląda na to, że gprof ma dwa składniki. Jeden z nich jest częścią samego kompilatora GCC, wywoływanego przez użycie argumentu-pg. Drugim jest polecenie gprof, które najwyraźniej jest częścią GNU binutils. Zostawię ci to, aby dowiedzieć się, jak zainstalować GCC i binutils na OSX...

 9
Author: feuGene,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-26 19:34:21

Ponieważ gprof nie działa w tej chwili na OS X, użyj Google Performance Tools , znanego teraz jako gperftools.

Również gcov działa "po wyjęciu z pudełka", jeśli masz zainstalowany gcc.

$ gcc -fprofile-arcs -ftest-coverage your_program.c
$ a.out
$ gcov your_program.c
 3
Author: cohadar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-21 03:26:42

Nie znalazłem rozwiązania dla systemu MacOS dla gprof i gcov nie działa dla mnie, ale gperftools (Narzędzia wydajności Google) działają. Oto jak zainstalować je na MacOS:

brew install google-perftools graphviz ghostscript
brew link --overwrite ghostscript

Następnie uruchom profiler w programie:

CPUPROFILE=program_name.prof DYLD_INSERT_LIBRARIES=/usr/local/Cellar/gperftools/2.6.3/lib/libprofiler.dylib ./program_name
pprof --pdf program_name program_name.prof > program_name.pdf

Możesz znaleźć więcej opcji dla gperftools tutaj . Na koniec otwórz plik program_name.pdf w przeglądarce PDF, takiej jak Podgląd, aby cieszyć się fantazyjnym wyjściem graphviz.

Oczywiście uruchamianie profilera w programie można bardzo łatwo zautomatyzować za pomocą skryptu Bash, ponieważ istnieje tylko jeden parametr program_name, a lokalizacja biblioteki współdzielonej jest stała. Oto przykładowy skrypt o nazwie profile.sh, który robi dokładnie to samo, ale zawiera kompilację i dodaje drugą zmienną, dzięki czemu można kompilować .cpp pliki o innej nazwie:

#!/bin/bash
g++-7 -fopenmp -O3 -o $1 $2.cpp
CPUPROFILE=$1.prof DYLD_INSERT_LIBRARIES=/usr/local/Cellar/gperftools/2.6.3/lib/libprofiler.dylib ./$1
pprof --pdf $1 $1.prof > $1.pdf
echo "Profiling results: $1.pdf"

Następnie zmodyfikuj uprawnienia, aby mogły być uruchamiane z dowolnego folderu:

chmod 755 profile.sh

Skrypt można wywołać z linii poleceń w następujący sposób, automatyzując cały proces:

./profile.sh program_name cpp_name

Możesz chcieć oddzielić kroki kompilacji i profilowania, co jest dość proste, usuwając linię g++-7 w skrypcie powłoki.

 1
Author: Adam Erickson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-05 04:23:27