2012-08-14 9 views
7

Soy principalmente un programador de C y C++ y a menudo necesito comprender rápidamente la estructura de bases de código muy grandes (gcc, kernel de Linux). Me pregunto si hay alguna herramienta para ayudar en este sentido. Estoy particularmente interesado en gráficos de llamadas, referencias de estructura de datos en todo el proyecto, gráficos de dependencia, ubicación rápida de símbolos, etc. Conozco ctags y cscope, pero estoy buscando algo con más visualización, como un gráfico de llamadas que permite ubicar rápidamente la definición de una función, arraigue el gráfico en una llamada particular, invirtiéndola (es decir, ubicando todas las llamadas a una función dada), etc.Herramientas de exploración, comprensión y lectura de código fuente

+0

RTCM - lea el manual del compilador. La mayoría de los compiladores hacen algo de lo que quieres y espero que los compiladores que uses no sean una excepción. –

Respuesta

0

Por favor intente y use SourceInsight. Es bastante útil para navegar por el código y entenderlo. Proporciona la mayoría de las funciones solicitadas por usted.

5

Si desea construir gráficos de llamadas, puede enrollar el suyo con el -finstrument-functions de GCC.

Básicamente, cuando se compila un programa con esta opción activada, GCC llama a las siguientes funciones cada vez que el programa de destino entra o sale de una función:

 void __cyg_profile_func_enter (void *this_fn, 
            void *call_site); 
     void __cyg_profile_func_exit (void *this_fn, 
            void *call_site); 

Lo que hay que hacer es definir estas funciones, y escribir en tu lógica para producir el gráfico de llamadas allí.

This extremely thorough tutorial explica cómo se puede producir un gráfico de llamadas usando -finstrument-functions y GraphViz. Todas las herramientas involucradas son FOSS y gratis.

Por supuesto:

  1. Los gráficos GraphViz produce son independientes, y no parte de un IDE.
  2. No estoy seguro de si la producción de un gráfico de llamadas de Linux (kernel) es posible de esta manera.
0

Puede probar cflow. Te da un graf de las llamadas de funciones dentro. Aunque no es muy flexible.

Cuestiones relacionadas