profiling valgrind callgrind

profiling - ¿Cómo utilizar callgrind para perfilar solo un cierto período de ejecución del programa?



valgrind (3)

Quiero usar valgrind para hacer algunos perfiles, ya que no es necesario volver a compilar el programa. (el programa que quiero perfilar ya está construido con "-g")

Pero valgrind (callgrind) es bastante lento ... así que esto es lo que debo hacer:

  1. iniciar el servidor (quiero hacer un perfil de ese servidor)
  2. tipo de adjuntar a ese servidor
  3. Antes de realizar alguna operación en el servidor, comience a recopilar datos de perfil.
  4. Una vez finalizada la operación, finalice la recopilación de datos del perfil.
  5. Analizar los datos de perfilado.

Puedo hacer este tipo de cosas usando Sun Studio en Solaris. (utilizando dbx). Solo quiero saber si es posible hacer lo mismo usando valgrind (callgrind)?

Gracias


Debes consultar la documentación de callgrind y leer sobre callgrind_control.

  1. Inicie su aplicación: valgrind --tool=callgrind --instr-atstart=no your_server.x
  2. Ver 1
  3. iniciar la recopilación de datos de perfil : callgrind_control -i on
  4. finaliza la recopilación de datos del perfil : callgrind_control -i off
  5. Analice los datos con kcachegrind o callgrind_annotate / cg_annotate

No dice qué sistema operativo (asumo Linux), en cuyo caso es posible que desee ver oprofile (gratis) o Zoom (no es gratis, pero puede obtener una licencia de evaluación), los cuales son muestreadores de perfiles y pueden perfil de código existente sin re-compilación. El zoom es mucho mejor y más fácil de usar (tiene una GUI y algunas características adicionales agradables), pero probablemente ya tenga oprofile en su sistema.


Para perfilar solo alguna función, también puede encontrar útil el CALLGRIND_START_INSTRUMENTATION y CALLGRIND_STOP_INSTRUMENTATION de <valgrind/callgrind.h> y usar la opción --instr-atstart=no como se sugiere en la respuesta de Doomsday .