¿Qué herramientas de análisis estático C++ de código abierto están disponibles? [cerrado]


Java tiene algunas herramientas de análisis estático de código abierto muy buenas, como FindBugs, Checkstyle y PMD. Esas herramientas son fáciles de usar, muy útiles, se ejecuta en múltiples sistemas operativos y libre.

Los productos comerciales de análisis estático de C++ están disponibles. Aunque tener estos productos son grandes, el costo es demasiado para los estudiantes y por lo general es bastante difícil obtener la versión de prueba.

La alternativa es encontrar código abierto C++ estático herramientas de análisis que se ejecutarán en múltiples plataformas (Windows y Unix). Mediante el uso de una herramienta de código abierto, podría ser modificado para adaptarse a ciertas necesidades. Encontrar las herramientas no ha sido tarea fácil.

A continuación se muestra una breve lista de herramientas de análisis estático de C++ que fueron encontradas o sugeridas por otros.

¿Cuáles son algunas otras herramientas portátiles de análisis estático C++ de código abierto que cualquiera conoce y puede recomendar?

Algunos relacionados vínculos.

Author: jnancheta, 2008-09-26

14 answers

Oink es una herramienta construida sobre el front-end de Elsa C++. El cerdo de Mozilla es un tenedor de Elsa / Oink.

Véase: http://danielwilkerson.com/oink/index.html

 19
Author: 3 revs, 3 users 40%Daniel S Wilkerson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-13 01:28:08

CppCheck es de código abierto y multiplataforma.

Mac OSX:

brew install cppcheck
 69
Author: Soo Wei Tan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-22 08:46:57

En cuanto al compilador GNU, gcc ya tiene una opción incorporada que habilita advertencia adicional a las de-Wall. La opción es -Weffc++ y se trata de las violaciones de algunas directrices de Scott Meyers publicado en sus libros " C++Eficaz y Más Eficaz".

En particular, la opción detecta los siguientes elementos:

  • Definir un constructor de copia y un operador de asignación para clases con asignación dinámica memoria.
  • Prefieren la inicialización a la asignación en constructores.
  • Hacer que los destructores sean virtuales en las clases base.
  • Have "operator=" return a reference to *this.
  • No intente devolver una referencia cuando deba devolver un objeto.
  • Distinga entre las formas prefijo y postfijo de los operadores de incremento y decremento.
  • Nunca sobrecargar "&&", "||", o",".
 52
Author: Nicola Bonelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-27 20:36:07

Está en desarrollo por ahora, pero clang hace análisis de C y está dirigido a manejar C++ con el tiempo. Es parte del proyecto LLVM .

Actualización : Mientras que la página de destino dice "El analizador es un trabajo continuo en progreso", sin embargo ahora está documentado como un analizador estático tanto para C como para C++.

Pregunta: ¿Cómo puedo ejecutar GCC/Clang para el análisis estático? (solo advertencias)

Opción del compilador: - fsyntax-only

 26
Author: Don Wakefield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:54

Alguien más mencionó-Weffc++, pero esa es en realidad una de las únicas advertencias de GCC que no enciendo por defecto. Sin embargo, el conjunto de advertencias que enciendo es la herramienta de análisis estático más importante de mi kit. Puede ver la lista completa de advertencias recomendadas.

En resumen:

- pedantic-Wall-Wextra-Wcast-align-Wcast-qual-Wctor-dtor-privacy-Wdisabled-optimization-Wformat=2-Winit-self-Wlogical-op-Wmissing-declarations -Wmissing-include-dirs-Wnoexcept-Wold-style-cast-Woverloaded-virtual-Wredundant-decls-Wshadow-Wsign-conversion-Wsign-promo-Wstrict-null-sentinel-Wstrict-overflow=5-Wswitch-default-Wundef-Werror-Wno-unused

Tenga en cuenta que algunos de estos requieren una nueva versión de gcc, por lo que es posible que deba eliminarlos de su lista si está atascado en 4.5 o algo así.

 15
Author: David Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:19

John Carmack también menciona PVS-Studio en esta interesante entrada de blog sobre "Análisis de código estático".

 14
Author: Alex Zakharenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-05 22:22:23

Si por Código abierto, realmente querías decir "libre", entonces el análisis de Microsoft prefast es bueno. Sólo ventanas, por supuesto. Está totalmente integrado en Visual Studio y el compilador. por ejemplo:

Cl /analizar muestra.cpp

 7
Author: user15071,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-27 07:59:33

El trabajo de análisis estático de Mozilla probablemente valga la pena echarle un vistazo.

 6
Author: Daniel James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-27 08:24:30

La férula parece llenar la cuenta para C.

Si no especificara código abierto diría que Gimpel Software's PCLint es probablemente una de las mejores herramientas disponibles para la comprobación de código estático en C++. Pero, por supuesto, no es de código abierto.

Mac OSX:

brew install splint
 4
Author: Onorio Catenacci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-26 02:47:19

Microsoft PREFast también está disponible en el Kit de controladores de Windows. La versión 7.0 se puede descargar aquí.

Los documentos de Microsoft indican que solo se debe ejecutar contra el código del controlador, pero este (antiguo) entrada de blog establece los pasos para ejecutarlo. Tal vez se puede integrar en un proceso de construcción normal?

 3
Author: tmitchell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-19 20:18:32

Hemos estado trabajando en un plug-in CDT de Eclipse llamado metriculator. Todavía está en desarrollo, pero algunos indicadores importantes (por ejemplo, LSLOC, McCabe, EfferentCoupling) ya están implementados.

Véase http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation para más detalles como demostración en video y documentación.

La última compilación nocturna está disponible para su instalación a través del sitio de actualización en: http://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site /

Descripción adicional

Metriculator analiza estáticamente el código fuente de C++ y genera métricas de software. Las métricas se implementan como Codan checkers. Los resultados del análisis se pueden explorar en una vista separada. Cada métrica tiene propiedades configurables (por ejemplo, un umbral para ' líneas máximas de código por función"). Superar este umbral reportará un problema y creará un marcador en el código fuente Editor.

Con metriculator puedes:

  • analizar archivos / carpetas / proyectos de C++
  • defina umbrales de métricas y habilite / deshabilite métricas usando la página de preferencias de codanes
  • tienen marcadores de problemas en los editores de código fuente
  • explore los resultados de la métrica
  • exportar resultados de métricas como nube de etiquetas (disponible como característica opcional a través del sitio de actualización)

Actualmente metriculator viene con las siguientes métricas:

  • McCabe (Cyclomatic Complejidad)
  • Acoplamiento eficaz por tipo
  • Líneas de Código Fuente Lógicas
  • Número de miembros por Tipo
  • Número de parámetros por Función
 2
Author: jules,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-19 08:18:54

Deberías probar oo-browser tiene una increíble integración con xemacs

 1
Author: Jude,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-09 16:55:02

También se pueden codificar extensiones de GCC en MELT (un lenguaje específico de dominio diseñado para extender GCC) o complementos de GCC en C (mucho más difícil) para hacer un análisis personalizado.

 1
Author: Basile Starynkevitch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-22 05:55:05

Doxygen hace algunos análisis de flujo de control y genera gráficos. Puede que no sean lo que estás buscando, pero no los he visto útiles.

 0
Author: Paul Nathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-12 22:24:25