Necesita ayuda para eliminar las rutas y variables de código muerto del código fuente C

7

Tengo un código C heredado en mis manos, y me asignan la tarea de filtrar símbolos muertos y no utilizados y rutas de acceso a él. A lo largo del tiempo hubo muchas inserciones y eliminaciones, lo que causó muchos símbolos no utilizados. He identificado muchas variables muertas que solo se escribieron una o dos veces, pero nunca se leyeron.

Ambas pruebas de blackbox / whitebox / regression demostraron que la eliminación del código muerto no afectó ningún procedimiento. (Tenemos una suite de prueba completa).

Pero esta eliminación se realizó solo en una pequeña parte del código. Ahora estoy buscando alguna forma de automatizar este trabajo.

Confiamos en GCC para hacer el trabajo.

P.S. Estoy interesado en eliminar cosas como:

  1. variables que se leen solo para leerlas.
  2. variables que se distribuyen en varios archivos de origen y solo se escriben en ellos.

Por ejemplo:

file1.c:
int i;

file2.c:
extern int i;
....
i=x;
    
pregunta Anjum Kaiser 06.07.2012 - 08:04

2 respuestas

5

Debería comprobar lo que scan-build de clang puede hacer por su compilación. A veces, se puede determinar si una variable solo se escribe, pero los resultados nunca se usan ( Dead store en el lenguaje de scan-build).

El problema que tienen todas estas herramientas es que no pueden determinar si una llamada como

int status = do_something(input_var);

hace más que asignar algún valor a status , por ejemplo. do_something puede modificar no solo input_var , sino también el estado global. Así que cuando limpie cosas, asegúrese de revisar las cosas que dependen de los efectos secundarios.

scan-build se integra muy bien en el proceso de construcción basado en make, por ejemplo

$ scan-build ./configure
$ scan-build make

ejecutará su código a través de escanear-construir cuando use autotools.

También puede probar cppcheck , pero en mi experiencia no encuentra más de lo que encuentra el análisis de compilación (y el análisis) la compilación puede encontrar otros problemas que cppcheck no puede ver).

    
respondido por el Benjamin Bannier 06.07.2012 - 09:29
1

Si no me equivoco, PC-Lint / FlexeLint de Gimpel puede decirle si las cosas están no usado. Creo que desde la última vez que lo usé (hace muchas lunas), seleccionará variables nunca utilizadas, funciones nunca utilizadas, encabezados nunca usados, etc., etc.

También tiene algún tipo de sistema para incrustar etiquetas para desactivar sus advertencias en líneas de código particulares, si lo desea.

Tenga en cuenta que la última vez que usé esta herramienta para encontrar rutas de código no utilizadas, fue un proceso de múltiples pasos: ejecutar la herramienta, eliminar todas las cosas no utilizadas, ejecutar la herramienta, encontrar más cosas no utilizadas (porque acabo de eliminar las funciones que estaban los únicos usuarios de algunas otras funciones), etc., etc.

Un poco caro, me temo, pero muy buenas herramientas, y si solo necesita una licencia para superar este problema, en lugar de una por desarrollador para integrarse con su compilación, entonces no está tan mal. Parece que las licencias de PC son mucho más baratas, por lo que si solo compro una para este trabajo, apostaría por eso.

    
respondido por el Michael Kohne 06.07.2012 - 13:17

Lea otras preguntas en las etiquetas