¿Qué información relacionada con las pruebas puede proporcionar la relación de llamada a función?
Sin embargo, si deseas analizar el código de un lenguaje de scripting, probablemente tengas que usar honestamente el primer método. ¿No sería bueno tener a mano un gráfico de llamadas antes de leer el código? A continuación se muestran algunas herramientas gratuitas que conozco que analizan las relaciones de funciones de C/C++.
El gráfico de llamada de función es un gráfico, y es un gráfico dirigido, y la mayor parte es un gráfico acíclico (gráfico acíclico), si no hay recursividad directa o indirecta en el código. Graphviz es una herramienta para dibujar gráficos dirigidos y no dirigidos, por lo que muchas herramientas de análisis de gráficos de llamadas lo utilizan como backend. ¿Qué pasa con la parte delantera? Depende de cada familia mostrar sus talentos.
El análisis del gráfico de llamadas se puede dividir a grandes rasgos en "estático" y "dinámico". El llamado análisis estático se refiere al análisis sin ejecutar el programa a analizar, por lo que el análisis dinámico registrará naturalmente las llamadas a funciones cuando el programa se esté ejecutando.
Hay dos métodos de análisis estático, uno es analizar el código fuente y el otro es analizar el archivo de destino compilado.
La calidad del gráfico de llamadas obtenido al analizar el código fuente depende de la comprensión del lenguaje de programación por parte de la herramienta de análisis, por ejemplo, si puede encontrar la función sobrecargada de C++ correcta. Doxygen es una herramienta de documentación de código fuente que también puede dibujar gráficos de llamadas. Parece que analiza el código fuente en sí para obtener la relación de llamada a la función. GNU cflow es una herramienta similar, pero parece centrarse en analizar diagramas de flujo.
Por supuesto, quien más sabe sobre lenguajes de programación es el compilador, por lo que a alguien se le ocurrió un parche que permite al compilador registrar la relación de llamada a la función durante la compilación. CodeViz (una herramienta inspirada en Martín de Vera) entra en esta categoría y (versión 1.0.9) parchea GCC 3.4.1.
Otra herramienta, Egipto, tiene una idea más ingeniosa. En lugar de jugar con el compilador, el compilador descarta la relación de llamada, luego la analiza y se la entrega a Graphviz para que la dibuje. Pero algunas personas comenzaron de nuevo y escribieron un compilador de lenguaje C (ncc) para analizar el gráfico de llamadas, lo cual fue muy valiente. Si hace lo mismo con el lenguaje C++, el costo será demasiado alto. Es más práctico analizar el gráfico de llamadas de C++ con la ayuda de un compilador.