Ich verwende perf record -g
auf x86-64 Linux, um ein Programm zu profilieren. Einige Symbole in libc oder libstdc ++ haben 0
als Eltern: __GI___strcmp_ssse3
(libc) und strcmp@plt
(libstdc ++) zum Beispiel. (Ich kann diese Symbole im Debugger tatsächlich unterbrechen und einen Backtrace abrufen.)
Ich würde gerne wissen, was die wichtigsten Anrufer dieser Funktionen sind und warum sie nicht aufgezeichnet werden. Liegt das daran, dass libc und libstdc ++ keine Frame-Zeiger auf x86_64 haben? Und, praktischer, gibt es einen Weg, dies zu umgehen?
perf record --call-graph dwarf
löst dieses Problem für mich. Leider scheint es, dass perf Probleme hat, Caller-basierte (dh "invertierte") Call-Graphen anzuzeigen, wenn Zwerginformationen verwendet werden. Deshalb habe ich angefangen, FlameGraph für die Visualisierung zu verwenden.perf
ist ein Kernel-Tool, das die verstrichene Zeit für Systemaufrufe anzeigt. Sie suchen nach GNU gprof. msgstr "gprof - Anrufdiagramm - Profildaten anzeigen". Um gprof zu verwenden, müssen Sie Ihre Quellen mit dem-pg
Schalter kompilieren .Daneben gibt es viele ausgefeilte Profilierungswerkzeuge wie
eclipse-cdt-profiling-framework
.quelle