2009-07-22 18 views
65

Necesito perfilar algún código que ejecute C++ en Linux. ¿Pueden ustedes recomendar algunos perfiladores?¿Qué es un perfilador fácil de usar para C++ en Linux?

+1

Debe agregar etiquetas Linux y C++. Probablemente obtendrá una mejor respuesta y rango de opiniones. – Duck

+1

Parece un duplicado de http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux. –

+0

por ejemplo: likwid, LLTng, oprofile, valgrind, vtune, gprof, perf, gperftools, pTop – Shan

Respuesta

17

valgrind Linux es un perfilador bien conocido

+0

pensamiento valgrind fue más para la pérdida de memoria comprobando ... Estoy intentando ver qué funciones se están llamando, etc. – shergill

+8

use la herramienta de la suite llamada "callgrind" – dfa

+1

Valgrind es simplemente un marco para crear herramientas dinámicas. Sin embargo, se ha convertido en sinónimo de Memcheck, una herramienta construida en Valgrind.Callgrind es bastante bueno en perfilador. – Falaina

11

Soy un fan de Oprofile. Se trata de instalar un módulo kernel y tiene un poco de curva de aprendizaje, pero es bastante potente y funciona muy bien para programas/programas optimizados sin símbolos de depuración.

Vtune es otro perfilador muy potente fabricado 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. Probablemente, Callgrind sea lo que más le interese. Cachegrind (cuyo featureet es un subconjunto de Callgrind) y Massif también son interesantes, pero no tengo experiencia con este último.

+0

+1 para oprofile, esa no es una "herramienta fácil" – dfa

+1

Haha, cierto. Probablemente no debería hacer ese sonido tan fácil :) Ciertamente no es tan simple como "ejecutar el programa debajo de él" como las herramientas de Vtune y Valgrind, pero siento que te acostumbras bastante rápido. – Falaina

+0

oprofile se ve interesante - ¿es compatible con x86_64? – LiraNuna

2

gprof es la herramienta estándar de gnu para crear perfiles.

4

Google también tiene un buen generador de perfiles como parte del google-perftools - que se incluyen en Debian/Ubuntu y posiblemente en otras distros.

5

Eche un vistazo a KCacheGrind que es una interfaz gráfica para valgrind y lo hace realmente fácil de usar.

34

Utilice gprof.

Simplemente compile con -pg marca (creo (pero no estoy seguro) tiene que cambiar de optimizaciones) y use gprof para analizar el archivo gmon.out que su ejecutable producirá.

por ejemplo:

gcc -pg -o whatever whatever.c 

./whatever 

gprof whatever gmon.out 

Lo mismo con g ++ y CPP.

+20

Crear un perfil de código no optimizado es un poco inútil, ¿no? Del mismo modo, el código de perfil que ha sido muy modificado con -pg a menudo lo engaña para optimizar los puntos equivocados. – federal

13

Zoom desde RotateRight (http://www.rotateright.com) es lo que he estado usando. Tiene una vista de mariposa de las funciones y puede hacer doble clic en cualquier función para sumergirse en el código fuente o en el código ASM. Cree con información de depuración (-g) para ver su fuente, pero aún debe compilar y crear un perfil optimizado como código.

+0

¡Le di una oportunidad a este programa, es realmente agradable! Actualmente mi perfil favorito en Linux; Sin embargo, vale la pena mencionar que requiere que el código se construya con '-fno-omit-frame-pointer' para un perfil efectivo. –

+1

El enlace parece muerto. ¿Alguien sabe dónde (o si) se puede encontrar en otro lugar? –

2

Eche un vistazo a Sysprof. Su distribución probablemente ya esté 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 de gcc.

Cuestiones relacionadas