Używam perf record -g
na Linuksie x86-64 do profilowania programu. Kilka symboli w libc lub libstdc ++ ma 0
jako element nadrzędny: na przykład __GI___strcmp_ssse3
(libc) i strcmp@plt
(libstdc ++). (Naprawdę mogę włamać się do tych symboli w debuggerze i uzyskać ślad wstecz.)
Chciałbym wiedzieć, jakie są główne funkcje wywołujące te funkcje i dlaczego nie są rejestrowane. Czy to dlatego, że libc i libstdc ++ nie mają wskaźników ramek na x86_64? A, bardziej praktycznie, czy jest jakiś sposób na obejście tego?
perf record --call-graph dwarf
rozwiązuje ten problem dla mnie. niestety wydaje się, że perf ma problemy z wyświetlaniem grafów wywołań opartych na abonentach (tj. „odwróconych”) podczas korzystania z informacji karła. Dlatego zacząłem używać FlameGraph do wizualizacji.perf
to narzędzie jądra, które pokazuje upływ czasu na wywołania systemowe. Szukasz GNU gprof. „gprof - wyświetl dane profilu wykresu połączeń”. Aby użyć gprof, musisz skompilować źródła za pomocą-pg
przełącznika.Oprócz tego istnieje wiele wyrafinowanych narzędzi do profilowania, takich jak
eclipse-cdt-profiling-framework
.źródło