2010-11-16 10 views
9

Hola chicos, estaba buscando una manera de encontrar funciones estáticamente inalcanzables en un proyecto (muy) grande de C++. Intenté usar doxygen y otras herramientas de análisis estático que se sugieren aquí, pero parecía que el proyecto era demasiado complicado para ellos. Finalmente, decidí que usar las herramientas de GCC (g ++, gprof, gcov, etc.) es la opción más segura, aunque no pude encontrar la manera de hacerlo. Creo que las optimizaciones de g ++ eliminan funciones estáticamente inalcanzables, pero no estoy seguro de cómo obtener los nombres de las funciones que elimina.Usando GCC para encontrar funciones inalcanzables ("código muerto")

¿Tiene alguna sugerencia?

Gracias!

+1

http://stackoverflow.com/questions/229069/dead-code-detection-in-legacy-cc-project – Veger

Respuesta

7

La optimización del código muerto generalmente la realiza el vinculador; el compilador no tiene la información general. Sin embargo, el compilador podría haber eliminado las funciones static no utilizadas (ya que tienen un enlace interno).

Por lo tanto, no debería mirar las opciones de GCC, sino las opciones de ld. Parece que quieres --print-gc-sections. Sin embargo, tenga en cuenta que probablemente desee que GCC ponga cada función en su propia sección, -ffunction-sections. Por defecto, GCC colocará todas las funciones en la misma sección, y ld no es lo suficientemente inteligente como para eliminar las funciones no utilizadas; solo puede eliminar las secciones no utilizadas.

-1

gcov es lo que estás buscando. Usted tiene eso en la lista en la pregunta, ¿no lo ha mirado?

+5

No realmente "gcov crea un archivo de registro denominado sourcefile.gcov que indica cuántas veces cada línea de una el archivo fuente archivo_fuente.c ha ejecutado ". Este es un análisis dinámico no estático. – stnr

Cuestiones relacionadas