2010-11-04 15 views
5

¿Alguien puede recomendar alguna herramienta para compilar y analizar en tiempo de ejecución el código de C++? Me golpean día tras día con solicitudes para identificar dónde se usan ciertas sobrecargas de funciones en una gran base de códigos.Recomendaciones para las herramientas de creación de perfiles de C++

Mi método actual implica una combinación de (a) búsqueda de texto usando grep/find y (b) suplantando los archivos de inclusión para comentar las sobrecargas en cuestión y recompilando completamente rompiendo la construcción donde se usan las sobrecargas. Como se puede imaginar, esto consume mucho tiempo.

Estoy haciendo esto en una plataforma Red Hat Linux, por cierto.

+0

¿Desea saber estáticamente dónde están los sitios de llamadas para métodos específicos? ¿Hay algo especial sobre el hecho de que están sobrecargados, o simplemente que es difícil saber cuál de las sobrecargas N se llama desde un sitio en particular? –

+1

No creo que esto sea 'fuera del tema'. Es cierto que pedí una recomendación de herramienta, pero el comentario de clausura dice * "... En su lugar, describa el problema y lo que se ha hecho hasta ahora para resolverlo". * Si lee la pregunta, hago ambas cosas. –

Respuesta

8

He usado una combinación de gprof y un script llamado gprof2dot que le da un gráfico de llamadas que muestra cuánto tiempo se usa en cada método.

Ver este artículo en gprof. También echa un vistazo a:

Optimizing C/C++ programs using the GProf profiler

Aquí es un gráfico de ejemplo de llamadas que muestra el tiempo de permanencia en cada método (tomado de la página gprof2dot):

alt text

+0

Muchas gracias por esto. Una pregunta: desde su respuesta y la nota gprof a la que hizo referencia, parece que gprof es bueno en el análisis del tiempo de ejecución, pero ¿qué pasa con el tiempo de compilación? Realmente quiero saber no qué rutas el código * realmente * atraviesa sino potencialmente lo que * podría *.No estoy tan preocupado por los tiempos de ejecución en esta etapa, pero quiero ser capaz de responder exhaustivamente a preguntas como "enumerar todos los lugares en la base de código donde' X (const char *) 'se llama" –

+0

@Robin Welch: Suena como quieres algo como cscope http://cscope.sourceforge.net/. Otra herramienta que puede serle útil es ctags http://ctags.sourceforge.net/. Esas son dos de las principales herramientas utilizadas para navegar por el código fuente del kernel de Linux. –

1

Me segundos @ recomendación de Intel VTune de la AR como digno de ver. No levante la nariz al gprof, es omnipresente y es un buen comienzo. Es posible que pueda obtener la información que desea de su depurador, ¿cuál es?

Si nos dijo qué compilador está utilizando, podríamos decirle qué características tiene para ayudarle.

+0

Es gcc versión 3.2.3 20030502 (Red Hat Linux 3.2.3-34) Por favor, no se burle, no es mi elección, sino los clientes. –

+0

@Robin Welch: no tiene intención de burlarse, pero tampoco puede ayudar mucho con GCC. –

3

Puede usar Callgrind. Ahora es parte del proyecto valgrind.

Tiene muy buena interfaz gráfica de usuario para revisar los resultados: KCacheGrind

Ambos están disponibles para su distribución.

1

También hay TAU, que aunque puede ser difícil de configurar, es bastante potente.

Cuestiones relacionadas