Necesito perfilar algún código que ejecute C ++ en Linux. ¿Pueden recomendar algunos perfiladores?
Necesito perfilar algún código que ejecute C ++ en Linux. ¿Pueden recomendar algunos perfiladores?
Respuestas:
Utilice gprof.
Simplemente compile con -pg
flag (creo (pero no estoy seguro) que debe desactivar las optimizaciones) y use gprof para analizar el archivo gmon.out que su ejecutable producirá.
p.ej:
gcc -pg -o whatever whatever.c
./whatever
gprof whatever gmon.out
Lo mismo ocurre con g ++ y cpp.
valgrind es un perfilador de Linux muy conocido
Zoom de RotateRight ( http://www.rotateright.com ) es lo que he estado usando. Tiene una vista de mariposa de funciones y puede hacer doble clic en cualquier función para sumergirse en el código fuente o asm. Compile con información de depuración (-g) para ver su fuente, pero aún debe compilar y perfilar el código optimizado .
-fno-omit-frame-pointer
un perfil de manera efectiva.
Soy fanático de Oprofile . Implica instalar un módulo del kernel y tiene una pequeña curva de aprendizaje, pero es bastante poderoso y funciona muy bien para programas / programas optimizados sin símbolos de depuración.
Vtune es otro generador de perfiles muy potente creado por Intel. Creo que la versión de Linux es gratuita para software no comercial.
También está el conjunto de herramientas Valgrind propuesto por dfa. Callgrind probablemente sea lo que más le interese. Cachegrind (cuyo conjunto de características es un subconjunto del de Callgrind) y Massif también son interesantes, pero no tengo experiencia con este último.
Eche un vistazo a KCacheGrind, que es una interfaz gráfica para valgrind y hace que sea realmente fácil de usar.
Google también tiene un buen generador de perfiles como parte de las herramientas de perfilado de Google , que se incluyen en Debian / Ubuntu y posiblemente en otras distribuciones.
Eche un vistazo a Sysprof . Es muy probable que su distribución ya lo tenga disponible.
Tenga en cuenta que todos los perfiladores mencionados funcionan mejor si su aplicación está compilada con punteros de marco. Es decir, debe usar -fno-omit-frame-pointer en la línea de comando gcc.
prof
.
prof
todos modos: si veo que f()
es la función más problemática estadísticamente, detendré el programa varias veces hasta que aterrice en f()
lugar de comenzar con una función aleatoria en la que paré primero.