Estoy usando perf record -g
Linux x86-64 para perfilar un programa. Varios símbolos en libc o libstdc ++ tienen 0
como padre: __GI___strcmp_ssse3
(libc) y strcmp@plt
(libstdc ++) por ejemplo. (De hecho, puedo romper estos símbolos en el depurador y obtener una traza inversa).
Me encantaría saber cuáles son las principales llamadas de estas funciones y por qué no están grabadas. ¿Es esto porque libc y libstdc ++ no tienen punteros de trama en x86_64? Y, más prácticamente, ¿hay alguna forma de evitar esto?
perf record --call-graph dwarf
resuelve este problema para mí desafortunadamente, parece que perf tiene problemas para mostrar gráficos de llamadas basados en llamadas (es decir, "invertidos") cuando se utiliza información enana. Es por eso que comencé a usar FlameGraph para la visualización.perf
es una herramienta del núcleo que muestra el tiempo transcurrido para las llamadas al sistema. Estás buscando GNU gprof. "gprof - mostrar datos del perfil del gráfico de llamadas". Para usar gprof necesitas compilar tus fuentes con el-pg
interruptor.Además de esto, hay muchas herramientas sofisticadas de creación de perfiles
eclipse-cdt-profiling-framework
.fuente