Pregunta

Estoy trabajando en un proyecto en el que estoy codificando en C en un entorno UNIX.He estado usando la herramienta lint para verificar mi código fuente.Lint existe desde hace mucho tiempo (desde 1979), ¿alguien puede sugerir una herramienta de análisis de código más reciente que pueda usar?Preferiblemente una herramienta que sea gratuita.

¿Fue útil?

Solución

No pase por alto el compilador en sí.

Lea la documentación del compilador y encuentre todas las advertencias y errores que puede proporcionar, y luego habilite tantas como tenga sentido para usted.

También asegúrese de indicarle a su compilador que trate las advertencias como errores para que se vea obligado a corregirlas de inmediato.("-Werror" en gcc)

También:"-Wall" en gcc sí no habilite todas las advertencias, no se deje engañar.

También también:Consulte valgrind (¡gratis!): "Detecta automáticamente muchos errores de gestión de memoria y subprocesamiento, y perfila sus programas en detalle".

Valgrind no es un verificador estático, ¡pero es una gran herramienta! http://valgrind.org

Otros consejos

Para el código C, definitivamente deberías usar Flexelint.Lo usé durante casi 15 años y lo juro.Una de las características realmente excelentes que tiene es que las advertencias se pueden activar y desactivar selectivamente mediante comentarios en el código ("/* lint -e123*/").Esta resultó ser una poderosa herramienta de documentación cuando deseaba algo fuera de lo común."Estoy desactivando la advertencia X, por lo tanto, hay una buena razón por la que estoy haciendo X".

Para cualquiera que tenga preguntas interesantes sobre C/C++, mire algunos de sus ejemplos en su sitio y vea si puede descubrir los errores sin mirar las sugerencias.

He oído cosas buenas sobre analizador estático de ruido metálico, que IIRC usa LLVM como backend.Si eso está implementado en su plataforma, podría ser una buena opción.

Por lo que tengo entendido, hace algo más que un simple análisis de sintaxis."Búsqueda automática de errores", por ejemplo.

Hemos estado usando Prevención de cobertura para consultar el código fuente de C++.

No es una herramienta gratuita (aunque creo que ofrecen escaneo gratuito para proyectos de código abierto), pero es una de las mejores herramientas de análisis estático que encontrará.He oído que es incluso más impresionante en C que en C++, pero hasta ahora nos ha ayudado a evitar una gran cantidad de errores.

Recientemente compilé una lista de todas las herramientas de análisis estático que tenía a mi disposición, todavía estoy en el proceso de evaluarlas todas.Tenga en cuenta que se trata en su mayoría de herramientas de análisis de seguridad.

Puedes usar cppcheck.Es una herramienta de análisis de código estático fácil de usar.
Por ejemplo:
cppcheck --enable=all .
comprobará todos los archivos C/C++ en la carpeta actual.

Las herramientas similares a pelusas generalmente sufren un problema de "falsa alarma":Informan de muchos más problemas de los que realmente existen.Si la proporción de advertencias realmente útiles es demasiado baja, el usuario aprende a ignorar la herramienta.Las herramientas más modernas dedican cierto esfuerzo a centrarse en las advertencias más probables/interesantes.

PC-lint/Flexelint son herramientas de análisis estático muy poderosas y útiles, y altamente configurables, aunque lamentablemente no son gratuitas.

Cuando se utiliza por primera vez una herramienta como esta, pueden generar una gran cantidad de advertencias, lo que puede dificultar la diferenciación entre las mayores y las menores.Por lo tanto, es mejor comenzar a usar la herramienta en su código lo más temprano posible en el proyecto y luego ejecutarla en su código con la mayor frecuencia posible, para que pueda lidiar con nuevas advertencias a medida que surjan.

Con un uso continuo como este, pronto aprenderá a escribir su código de una manera que confirme las reglas aplicadas por la herramienta.

Debido a esto, prefiero herramientas como Lint, que se ejecutan relativamente rápido y, por lo tanto, fomentan el uso continuo, en lugar de las herramientas más engorrosas que puede terminar usando con menos frecuencia, si es que las usa.

Puedes probar CppDepende, un analizador estático bastante completo disponible en Windows y Linux, a través de VS Plugin, IDE o línea de comandos, y es gratuito para contribuyentes de código abierto

Podrías encontrar el herramienta uno útil.Es una de las pocas opciones gratuitas que no son juguetes.Se diferencia de pelusa, Flexelint, etc.al centrarse en una pequeña cantidad de errores "semánticos" (deserefs de puntero nulo, índices de matriz fuera de límites y uso de variables no inicializadas).También permite controles definidos por el usuario, como la disciplina de bloqueo y desbloqueo.

Estoy trabajando para lograr el lanzamiento público de una herramienta sucesora, Orión (CONTENIDO YA NO DISPONIBLE)

Hay una opción "-Weffc++" para gcc que, según la página de manual de Mac OS X:

Advierta sobre violaciones de las siguientes pautas de estilo del libro Effective C++ de Scott Meyers:

[recorte]

Sé que preguntaste sobre C, pero esto es lo más cercano que conozco...

hilas se actualiza constantemente...Entonces, ¿por qué querrías uno más reciente?

Por cierto, flexelint es hilas

Buen día,

Estoy totalmente de acuerdo con las sugerencias para leer y digerir lo que le dice el compilador después de configurar -Wall.

Una buena herramienta de análisis estático para la seguridad es Buscador de defectos escrito por David Wheeler.Hace un buen trabajo buscando varios exploits de seguridad,

Sin embargo, no reemplaza que alguien con conocimientos lea su código.Como dice David en su página web: "¡Un tonto con una herramienta sigue siendo un tonto!"

salud,

Robar

Descubrí que, en general, es mejor utilizar múltiples herramientas de análisis estático para encontrar errores.Cada herramienta está diseñada de manera diferente y pueden encontrar cosas muy diferentes entre sí.

Hay algunas buenas discusiones en algunas de las charlas. aquí.Proviene de una conferencia celebrada por el Departamento de Seguridad Nacional de EE. UU. sobre análisis estático.

Escaso es una herramienta informática, ya disponible en Linux, diseñada para encontrar posibles fallos de codificación en el kernel de Linux.

Hay dos proyectos activos de Centro de verificación de Linux tenía como objetivo mejorar la calidad de los módulos del kernel cargables.

  1. Verificación de controladores de Linux (LDV): un conjunto de herramientas completo para la verificación del código fuente estático de controladores de dispositivos Linux.
  2. KEDR Framework: un marco extensible para análisis dinámico y verificación de módulos del kernel.
  3. Otro proyecto en curso es la Verificación del sistema de archivos de Linux, que tiene como objetivo desarrollar un conjunto de herramientas dedicado para la verificación de implementaciones del sistema de archivos de Linux.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top