¿Visualización de código fuente de C / C ++?

Básicamente, quiero herramientas que generen visualización de código fuente como:

  • gráfico de llamada de función
  • gráfico de dependencia

Doxygen es realmente excelente para esto, aunque necesitará instalar GraphViz para dibujar los gráficos.

Una vez que tienes todo instalado, es bastante simple dibujar los gráficos. Asegúrate de establecer EXTRACT_ALL y CALL_GRAPH en verdadero y deberías estar listo para continuar.

La documentación completa sobre esta función para Doxygen está aquí .

Recomiendo BOUML . Es una aplicación de modelado UML gratuita, que:

  • es extremadamente rápido (la herramienta UML más rápida que se haya creado, consulte los puntos de referencia ),
  • tiene una sólida compatibilidad con la importación de C ++,
  • tiene una gran compatibilidad con las exportaciones de SVG, lo cual es importante, ya que es muy conveniente ver gráficos grandes en formato vectorial, que escalan rápidamente en, por ejemplo, Firefox (puede cambiar rápidamente entre vista de pájaro y vista de detalles de clase).
  • tiene todas las funciones, impresionantemente desarrollado intensamente (mira la historia del desarrollo , es difícil creer que sea posible un progreso tan rápido).

Entonces: importe su código en BOUML y véalo allí, o exporte a SVG y visualícelo en Firefox.

Para la versión gratuita:

Puede ver diferentes herramientas para el diseño y modelado de software ( Rational Rose , Sparx Enterprise Architect , Umbrello , etc.). La mayoría de ellos tiene alguna funcionalidad para invertir el modelado por código fuente y obtener diagtwigs de clase UML, y en ocasiones incluso diagtwigs de secuencia (y esto está muy cerca de las funciones de gráfico de llamadas).

Pero después de obtener algunas imágenes en una base de código de proyecto realmente grande, puede darse cuenta de que estos gráficos son difíciles de leer y comprender. Desafortunadamente las capacidades de visualización de complejidad son muy limitadas.

En cuanto a mí, usar un modismo de “dividir y gobernar” es un enfoque más conveniente. Puede extraer diferentes bloques o capas de funcionalidad de su base de código (simplemente clasificando archivos cpp por carpetas diferentes a veces). Otra forma es usar algunos scripts (bash, python) para crear tablas csv simples con los parámetros interesados ​​de los archivos, clases o funciones como “número de dependencias”, etc.

Prueba doxygen

Ejemplo de salida de Xerces

Si usa Visual Studio, la versión Ultimate 2010 le permite generar diagtwigs de secuencia y gráficos de dependencia. Sin embargo, el lanzamiento actualmente solo admite proyectos de aplicaciones .NET.

El equipo ha recibido mucho interés en apoyar C ++ en una versión futura, por lo que es posible que desee mantenerse atentos. Mientras tanto, puede publicar en el foro VS 2010 Architectural Discovery & Modeling Tools en http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads para solicitar una actualización. Sé que al equipo del producto le encanta escuchar los comentarios de los clientes sobre las herramientas.

Mientras tanto, puede obtener más información sobre cómo crear diagtwigs de secuencia y diagtwigs de dependencia desde el código .NET en los siguientes temas:

Cómo buscar código usando Architecture Explorer : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

Cómo: generar documentos gráficos desde código : http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Cómo: Explorar código con diagtwigs de secuencia : http://msdn.microsoft.com/en-us/library/ee317485%28VS.100%29.aspx

Para probar el lanzamiento de RC y brindar comentarios, descárguelo en http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a.

Puede ser una duplicación, pero echa un vistazo a ollydbg, IDA Pro y este sitio web tiene un montón de recursos con algunas imágenes muy sexys.

Además de las herramientas escritas arriba, puedes intentar entender . Pero, no es gratis.

Hay una herramienta antigua llamada CDOC que todavía usamos para generar árboles de llamadas.