J'utilise perf record -g
sur x86-64 Linux pour profiler un programme. Plusieurs symboles dans libc ou libstdc ++ ont 0
pour parent: __GI___strcmp_ssse3
(libc) et strcmp@plt
(libstdc ++) par exemple. (Je peux en fait casser ces symboles dans le débogueur et obtenir une trace.)
J'aimerais savoir quels sont les principaux appelants de ces fonctions et pourquoi elles ne sont pas enregistrées. Est-ce parce que libc et libstdc ++ n'ont pas de pointeurs de trame sur x86_64? Et, plus concrètement, y a-t-il un moyen de contourner cela?
perf record --call-graph dwarf
résout ce problème pour moi. malheureusement, il semble que perf ait des problèmes pour afficher des graphiques d'appel basés sur l'appelant (c'est-à-dire "inversés") lors de l'utilisation d'informations naines. C'est pourquoi j'ai commencé à utiliser FlameGraph pour la visualisation.perf
est un outil du noyau qui affiche le temps écoulé pour les appels système. Vous recherchez GNU gprof. msgstr "gprof - affiche les données du profil du graphique d 'appel". Pour utiliser gprof, vous devez compiler vos sources avec le-pg
commutateur.En plus de cela, il existe de nombreux outils de profilage sophistiqués comme
eclipse-cdt-profiling-framework
.la source