2008-09-30 97 views
60

¿Tiene alguna sugerencia de herramientas para facilitar la tarea de comprender el código C/C++? Acabamos de heredar una gran pieza de software escrita por otros y necesitamos aprender rápidamente sobre ella. ¿Algún consejo sobre herramientas que podrían simplificar esta tarea?Herramienta para visualizar el flujo de código (C/C++)

+8

@casperOne: ¿por qué esto "no es constructivo"? Es útil para todos ... ¡y constructivo! – dagnelies

+0

@arnaud Las preguntas de la lista de compras no son constructivas. http://blog.stackoverflow.com/2010/11/qa-is-hard-lets-go-shopping/ – casperOne

+6

@casperOne: el artículo que menciona describe preguntas sobre recomendaciones para comprar hardware, y así sucesivamente. Definitivamente preguntas para rechazar. En este caso, se trata de herramientas y técnicas para resolver un problema en particular, es decir, ayudar a comprender el código grande. Personalmente encuentro el puente entre los dos bastante grande. – dagnelies

Respuesta

24

SourceInsight y Understand for C++ son las mejores herramientas que puede obtener para el análisis de códigos c/C++, incluidos los diagramas de flujo.

+7

Quiero saber si alguna herramienta para Linux? –

+0

CppDepend (http://www.cppdepend.com) genera un gráfico de llamadas, un gráfico de dependencia con muchas características interesantes y también funciona para Linux. –

7

Personalmente, utilizo el depurador. Ejecute el código y vea qué está haciendo y dónde está yendo es la única manera.

Sin embargo, puede ejecutarlo a través de algunos generadores de documentación que (a veces) ayudan. Un buen ejemplo es doxygen.

+0

+1 El depurador es el única forma de entender el código. –

+7

Me parece que tratar de entender un * gran * código base con el que no tienes experiencia es bastante ridículo. Intenta hacerlo en un proyecto como Clang o Linux. Te volverás loco. Bueno para el código que estoy familiarizado, o proyectos de tamaño pequeño/mediano en mi humilde opinión. –

+1

Vine aquí desde google porque he estado usando depurador para encontrar dónde cambiar el código en un gran proyecto sin éxito durante cuatro días. –

4

Doxygen le dará diagramas de relaciones de clase si usa graphviz, incluso si no se ha preparado específicamente para ello.

9

El software de generación de perfiles le da una idea de qué funciones se han llamado.

Si puede utilizar Linux, intente KCachegrind

0

Doxygen es una herramienta de generación de doc libre (similar al Javadoc) que también va a producir gráficos de relación así.

1

Personalmente uso las herramientas del depurador de Visual Studio.

Viene con la función "Gráfico de llamadas" que le permitirá visualizar cosas en pequeñas cajas. Además, la pila de llamadas y las características de reloj habituales suelen ser todo lo que necesito

+0

¿Dónde está el gráfico de llamadas en las herramientas del depurador de Visual Studio? Solo puedo encontrar la jerarquía de llamadas en Visual Studio sin herramientas de depuración. –

0

Doxygen, lo bueno de esto es que le hará saber hoe feo/bueno es su código en términos de dependencia cíclica de las clases. Por lo tanto, se verá obligado a volver a factorizar el código, aunque no le guste :-)

1

tratar AQtime, Es una herramienta de perfilado que muestra todas las funciones que llamaron (y el tiempo que tomó), se puede establecer el puntos de inicio y fin para el análisis. Tienen una prueba de 30 días.

+0

Los gráficos de llamadas de AQtime a veces son muy esclarecedores, incluso si cree conocer el código. – bk1e

3

Existen algunas herramientas como Egypt http://www.gson.org/egypt/egypt.html que funcionan, pero solo si coincide con la versión GCC esperada utilizada para compilar el código y la versión exacta del generador de callgraph. Lo mismo puede decirse de codeviz http://www.csn.ul.ie/~mel/projects/codeviz/

Otra opción es valgrind se utiliza en modo Cachegrind (que genera un tipo de callgraph que puede seguir desde el programa kcachegrind.

1

Solía ​​Borland Together un tiempo atrás y se hizo un decente trabajo de generar modelos a partir del código. Creo que incluso generará diagramas de secuencia a partir del código. Tenga en cuenta que si su código es un desastre, su modelo también lo será. Y, como recuerdo, no es barato, pero a veces puede obtener un especial.

1

Rational Quantify también presenta un bonito gráfico de llamadas

5

KScope, basado en la utilidad cscope, si está en Linux (KDE). Lo mejor que he usado (y uso todo el tiempo) para delegar en una gran pieza de código desconocido que tengo que modificar de alguna manera o qué API debo emplear para mis necesidades. Entre sus características se encuentran la base de datos de referencias cruzadas, que se puede buscar de muchas maneras: puede encontrar todas las referencias de un símbolo, su definición global, encontrar llamadores/calles de una función y mucho más. Incluso tiene un IDE incorporado y la capacidad de mostrar un gráfico de llamadas.

6

Doxygen es muy bueno para generar diagramas a partir del código sin aplicar el marcado, si activa la opción EXTRACT_ALL. Necesita GraphViz instalado para obtener diagramas generados con la configuración HAVE_DOT. Creo que tenerlo instalado y dejar DOT_PATH en blanco funciona bien en Windows, pero en OS/X tengo que señalar directamente a la ubicación de la herramienta de puntos.

Hay un excelente artículo Code Spelunking en ACM Queue que habla más sobre el uso de Doxygen y DTrace.

0

Slickedit es ideal para navegar por bloques grandes de código que no conoce. La función de etiquetas le permite tratar el código de manera funcional, sin tener que lidiar con el archivo en el que se encuentra (EMACS tiene etiquetas y es tan bueno como Slickedit, pero con una curva de aprendizaje un poco más pronunciada)

Cuando llegue a un método, clase o variable que no comprenda, simplemente presione push para ir a ese código, lo revise y vuelva a etiquetarlo. (ésos están obligados a presionar teclas, por lo que es muy rápido)

También puede usar las referencias de búsqueda para ver dónde se usa esa función/variable.

países toneladas de tiempo por tener que ir y averiguar qué archivo está en algo

Cuestiones relacionadas