2012-02-14 34 views
17

Necesito un gráfico dinámico de llamadas para mi aplicación. Lo ejecuto con la herramienta callgrind (valgrind suite) y obtuve el archivo callgrind.out.xxxxx. Ahora, quiero hacer una representación gráfica de esta información. KCacheGrind no me ayuda mucho porque dibuja una parte limitada del gráfico (dibuja ~ 50 funciones en lugar de ~ 1500 perfil y no sé cómo solucionarlo). ¿Cómo puedo obtener una imagen gráfica donde se dibujarán todas las funciones?Interpretación de datos callgrind

+0

¿El callgrind.out contienen datos que falta en la gráfica? Además, si ordena por "sí mismo", ¿queda tiempo/instrucciones relevantes que se gastan en funciones que no figuran? No puedo recordar un caso en el que las partes relevantes quedaron fuera. –

+0

Sí, callgrind.out contiene todos los datos que necesito (incluidas las funciones que faltan en el gráfico) y la mayoría de las funciones que no están enumeradas en el gráfico tienen tiempo/instrucciones relevantes gastados. No sé por qué 'KCacheGrind' dibuja solo una parte. UPD: si elijo la función que quiero en la lista de funciones (colocada a la izquierda en el diseño predeterminado de 'KCacheGrind'), el gráfico se vuelve a dibujar para mostrar estas funciones, pero todavía faltan otras. Necesito el gráfico completo a la vez. Gracias por adelantado. – maverik

Respuesta

22

Ok, he encontrado el camino. El archivo callgrind.out generado se puede convertir al archivo dot utilizando gprof2dot (sí, esta herramienta también puede analizar archivos callgrind). Y entonces se puede obtener la imagen gráfica usando dot -T<type> dotfile.dot -o graphfile.<type>

+0

Interesante. ¿El gráfico generado es legible para 1500 funciones? –

+0

El acuerdo es que en realidad necesito comparar dos gráficos de dos versiones diferentes de software, por lo que no hay objetivo de leer/comprender todo el gráfico, solo necesito algunos caminos y sé dónde debo buscarlos. OTOH, la imagen 'png' de generación tarda unos 5 minutos en mi' Core i7-2600 3.4GHz/8 Gb DDR3' y el tamaño del archivo resultante es de 23 MBytes. No todos los visualizadores de imágenes pueden manejarlo de manera rápida y correcta (prueba de esfuerzo perfecta IMO :)) – maverik

+0

se supone que debemos escribir el '-T '? o reemplazamos '' con algo? – nmz787

16

Usando el siguiente comando para generar graph.png usando gprof2dot

$./gprof2dot.py --format=callgrind --output=out.dot /tmp/cachegrind.out.1360843301.16101 

$dot -Tpng out.dot -o graph.png 
Cuestiones relacionadas