Estou usando o perf record -g
Linux x86-64 para criar um perfil de um programa. Vários símbolos na libc ou libstdc ++ têm 0
como pai: __GI___strcmp_ssse3
(libc) e strcmp@plt
(libstdc ++), por exemplo. (Na verdade, posso quebrar esses símbolos no depurador e obter um retorno.)
Gostaria muito de saber quais são os principais chamadores dessas funções e por que elas não são gravadas. Isso ocorre porque libc e libstdc ++ não possuem ponteiros de quadro no x86_64? E, mais praticamente, existe alguma maneira de contornar isso?
perf record --call-graph dwarf
resolve esse problema para mim. infelizmente, parece que o perf tem problemas para exibir gráficos de chamadas baseados em chamadores (ou seja, "invertidos") ao usar informações de anões. Por isso comecei a usar o FlameGraph para visualização.perf
é uma ferramenta do kernel que mostra o tempo decorrido para chamadas do sistema. Você está procurando o GNU gprof. "gprof - exibe dados do perfil do gráfico de chamadas". Para usar o gprof, você precisa compilar suas fontes com o-pg
switch.Além disso, existem muitas ferramentas sofisticadas de criação de perfis
eclipse-cdt-profiling-framework
.fonte