Muszę sprofilować kod działający w C ++ w systemie Linux. Czy możecie polecić jakieś profilery?
Muszę sprofilować kod działający w C ++ w systemie Linux. Czy możecie polecić jakieś profilery?
Odpowiedzi:
Użyj gprof.
Po prostu skompiluj z -pg
flagą (myślę (ale nie jestem pewien), że musisz wyłączyć optymalizacje.) I użyj gprof do analizy pliku gmon.out, który następnie utworzy twój plik wykonywalny.
na przykład:
gcc -pg -o whatever whatever.c
./whatever
gprof whatever gmon.out
To samo z g ++ i cpp.
Valgrind to dobrze znany program do profilowania Linuksa
Zoom z RotateRight ( http://www.rotateright.com ) jest tym, czego używam. Ma widok motyla na funkcje i możesz dwukrotnie kliknąć dowolną funkcję, aby zanurzyć się w kodzie źródłowym lub ASM. Kompiluj z informacjami debugowania (-g), aby zobaczyć źródło, ale nadal powinieneś budować i profilować kod zoptymalizowany .
-fno-omit-frame-pointer
aby skutecznie profilować.
Jestem fanem Oprofile . Obejmuje instalację modułu jądra i wymaga trochę nauki, ale jest dość potężny i działa bardzo dobrze dla zoptymalizowanych programów / programów bez symboli debugowania.
Vtune to kolejny bardzo potężny program do profilowania stworzony przez firmę Intel. Uważam, że wersja dla systemu Linux jest bezpłatna dla oprogramowania niekomercyjnego.
Istnieje również zestaw narzędzi Valgrind proponowany przez dfa. Callgrind prawdopodobnie byłby tym, co Cię najbardziej interesuje. Cachegrind (którego zestaw funkcji jest podzbiorem Callgrinda) i Massif również są interesujące, ale nie mam doświadczenia z tym drugim.
Spójrz na KCacheGrind, który jest graficzną nakładką na valgrind i sprawia, że jest naprawdę łatwy w użyciu.
Google ma również fajny profiler jako część google-perftools - które są zawarte w Debianie / Ubuntu i prawdopodobnie innych dystrybucjach.
Spójrz na Sysprof . Twoja dystrybucja najprawdopodobniej już jest dostępna.
Zauważ, że wszystkie wymienione programy profilujące działają najlepiej, jeśli Twoja aplikacja jest skompilowana ze wskaźnikami ramek. Oznacza to, że powinieneś użyć -fno-omit-frame-pointer w linii poleceń gcc.
prof
.
prof
tak: jeśli widzę, że f()
jest to najbardziej problematyczna funkcja statystycznie, zatrzymam program kilka razy, aż wyląduję, f()
zamiast po prostu zaczynać od losowej funkcji, w której najpierw zatrzymałem się.