2009-08-13 6 views
9

Una especie de pregunta de seguimiento/relacionada con this.Visualización de código en C++

Estoy tratando de controlar una gran base de código que tiene cientos y cientos de clases y una gran jerarquía de herencia. Quiero poder ver las "vetas principales" de la jerarquía de herencia de un vistazo, no todas las clases "periféricas" que solo hacen algo muy específico/especializado. El "Diagrama de clase de vista" de Visual Studio crea algo que parece un tren y se extiende horizontalmente por la pantalla y no está muy organizado. No puedes asimilarlo fácilmente.

Acabo de probar doxygen y graphviz pero los resultados son ... algo similares a Visual Studio. Me encantan los gráficos de llamadas, pero de nuevo demasiados detalles por lo que intento obtener.

Necesito una forma rápida de generar la jerarquía de herencia, en algún tipo de colapsable vista.

Respuesta

6

¿Por qué no hacerlo manualmente? Es una gran experiencia de aprendizaje cuando se comienza a trabajar con una gran base de códigos. Normalmente solo miro qué clase hereda de qué, y qué clase contiene qué instancias, referencias o punteros a otras clases. Tenga una hoja de papel al lado y obtenga un dibujo ...

+1

De hecho terminé tomando el diagrama del tren y examinándolo. Luego dibujé un nuevo diagrama. Una experiencia gratificante! – bobobobo

5

Una buena herramienta UML debería hacer el truco.

Aquí está una lista de las herramientas UML genéricos: http://en.wikipedia.org/wiki/List_of_UML_tools

Hay muchos por ahí, todos con diferentes conjuntos de características. Intenta jugar con algunos para ver si obtienes la salida que deseas. Si los gratuitos le fallan, es posible que tenga que pagar una buena herramienta UML de grado comercial

4

Puede probar CppDepend, no crea una jerarquía de clases como Doxygen pero puede mostrar "la imagen completa" de su proyecto, también muestra algunas métricas de código

4

lugar de entrar en la herramienta completa Diseñador de clases, sólo tiene que utilizar la "Vista de clases" o la "Lista de objetos" en Visual Studio - presentan jerarquías de clase totalmente plegable.

0

¿Cuál es su definición de 'vena principal'? O quieres un reductor de gráficos o un skeletizer (puedes encontrar o escribir uno y aplicarlo a lo que produce Doxygen y el resto) o, 'main vein' tiene algo que ver con la función del código y, no creo que una herramienta automatizada puede ayudarlo con eso. A menos que pueda señalarlo 'Estos son los bits importantes que hacen entrada y salida, muéstreme solo los elementos que están a uno o dos pasos de distancia de los caminos entre estos'. Hum, suena como una herramienta genial para escribir :)

... la jerarquía de herencia, en algún tipo de vista colapsable.

de nuevo, una dulce idea para una herramienta!

2

Consulte SourceNavigator, es de código abierto, funciona en varias plataformas y tiene un navegador de jerarquía, un explorador de clases, un navegador de referencias cruzadas y más que le permitirán navegar y comprender el código.

Lo estoy usando desde hace un tiempo, especialmente cuando tengo un código nuevo para entender y entender.

3

He tenido más éxito con valgrind y kcachegrind para hacer esto. Ejecuta valgrind contra su binario de depuración, realice cualquier acción que le interese, luego importe la salida en kcachegrind para ver todo lo que siempre le gustaría saber sobre quién llamó qué, con qué frecuencia y cuándo. Además, debido a que lo haces dinámicamente, detecta casos que el análisis estático probablemente no sea así.

También he tenido éxito utilizando las funciones de ingeniería inversa de Enterprise Architect, aunque esto no termina tan bien (¡pero se obtiene un modelo UML que es bueno!).

Y finalmente, una herramienta llamada "Entender". Esto es bastante bueno en el análisis estático de OO, pero creo que es bastante caro y no tan utilizado.

2

Para obtener un producto comercial a un precio razonable, es posible que desee consultar SolidSX desde Vizlogix (www.vizlogix.com). (Si se encuentra fuera de América del Norte, vaya a SolidSource - www.solidsourceit.com.)

Genera un diagrama radial que puede colapsarse y expandirse. También se integra con Visual Studio (tanto BSC como .NET).

+0

+1 por rareza y extravagancia :) – bobobobo

Cuestiones relacionadas