2011-10-13 6 views
6

Mi programa C++ consume una gran cantidad de CPU, y más mientras se ejecuta. Solía ​​Herramientas de rendimiento de Google al perfil uso de la CPU, y esto es lo que tengo:Cómo interpretar direcciones en herramientas de rendimiento de Google Perfil de CPU

(pprof) top 
Total: 1343 samples 
    1330 99.0% 99.0%  1330 99.0% 0x0000000801dcb11c 
     7 0.5% 99.6%  7 0.5% 0x0000000801dcb11e 
     4 0.3% 99.9%  4 0.3% program::threadWorker 
     1 0.1% 99.9%  1 0.1% 0x0000000801dcb110 
     1 0.1% 100.0%  1 0.1% 0x00007fffffffffc0 

Sin embargo, sólo 1 de los 5 procesos que se muestran aquí es un nombre de función real; el resto son direcciones. ¿Cómo puedo saber a qué se refieren estas direcciones? (Por supuesto, estoy más interesado en la primera dirección que se indica más arriba)

Editar: Así es como me encontré con el perfilador:

env CPUPROFILE=prof.out ./a.out 
[kill program] 

pprof ./a.out prof.out 

Además, he encontrado la causa por la inspección de código. Pero aún sería bueno que el perfilador identificara la función culpable en lugar de una dirección.

Respuesta

2

¿Es posible que no haya especificado el ejecutable al cargar los resultados en google-pprof?

lo ejecuto como:

$ google-pprof executable /tmp/executable.hprof --text | less 

y puede ver los nombres de las funciones muy bien. ¿O que esos métodos están en alguna biblioteca compartida que no está en su camino cuando ejecuta google-pprof?

+0

He editado mi pregunta para incluir cómo ejecuté el generador de perfiles. Encontré la función culpable, que se declara en el mismo archivo y no desde una biblioteca compartida. – jules

+0

@jules: ¿Te ayudó el generador de perfiles a encontrar la función culpable? –

+0

@Mike Dunlavey: no, lo encontré por inspección de código porque mi programa es bastante pequeño. – jules

Cuestiones relacionadas