2009-11-13 14 views
5

Quiero analizar los archivos actuales de C++ en un proyecto y enumerar todos los métodos/funciones en él y luego generar la función de llamada y los árboles del llamador. F.g. puede consultar cómo doxygen genera el árbol de llamadas.C++: generar el árbol de llamadas a la función

He comprobado gccxml pero no enumera las funciones llamadas desde otra función.

Por favor sugiero algunas herramientas livianas (código abierto) que puedo usar.

gracias!

+4

El problema que desea resolver es HARD. C++ es un lenguaje muy difícil de analizar. – jmucchiello

Respuesta

6

El árbol de llamadas estáticas no es necesariamente el árbol de llamadas en tiempo de ejecución. Las rellamadas y las funciones virtuales enturbian el agua. Entonces el análisis estático solo puede darte una parte de la respuesta.

La única forma en que alguna vez he podido obtener un árbol de llamadas confiable era ejecutar gprof en el ejecutable compilado. La salida se puede masajear en un árbol de llamadas muy preciso.

4

gccxml, actualmente, esencialmente ignora los cuerpos de las funciones (incluidas las llamadas a otras funciones). Una buena descripción general de las opciones de análisis C++ actualmente disponibles es here, no necesariamente un portador de buenas noticias, pero sí una lectura recomendada.

+0

Tiene tanta razón en su análisis que casi me hace llorar. –

2

Usted menciona Doxygen. ¿Por qué no usar eso?

0

Probablemente me malinterpreten, pero el estudio visual tiene algo similar. Haga clic con el botón derecho en una función y seleccione Explorador de llamadas.

0

Es imposible proporcionar un análisis de árbol de llamadas completo para una aplicación que depende de la recepción de eventos asincrónicos. Esta es la forma en que tenemos la prueba. Incluso en los casos más simples en los que la aplicación es totalmente determinista, esta podría ser una tarea relativamente desalentadora y, en mi opinión, proporcionaría un valor marginal. Entonces, ¿cómo analizarías los resultados? ¿A qué efecto?

Cuestiones relacionadas