software herramientas google estatico codigo analytix analisis java static analysis call-graph

herramientas - Análisis estático del gráfico de llamadas de Java



pmd (5)

Lo que me gustaría hacer es escanear un conjunto de clases de Java y rastrear todas las llamadas a métodos desde un método específico de una clase abstracta, y dentro de ese contexto, crear una lista de todos los códigos que realiza alguna operación (en este caso, instancias) una instancia de cierta clase). Quiero saber el número de línea y los argumentos proporcionados.

Empecé a buscar en BCEL, pero parece que no tiene incorporado el trazado de gráficos de llamada. No estoy seguro de escribir el mío porque la sobrecarga, el tipo de firmas y el envío polimórfico pueden ser complicados.

Casi esperaba que existiera una herramienta o código de ejemplo, pero todavía no he encontrado nada. Realmente parece que estoy a punto de reinventar una rueda. Pero si lo hago será una rueda de código abierto y estará disponible en GitHub ;-)

PD: Encontrarás la pregunta existente " Cómo generar un gráfico de llamadas Java ", porque suena idéntico, pero no es lo que necesito.



Parece que quieres algo que proporcione acceso a la sintaxis abstracta y una tabla de símbolos completa. Luego, un escaneo personalizado de los AST de las funciones en el gráfico de llamadas enraizadas en cada método de implementación (como lo indican las tablas de símbolos) de un método abstracto le brinda la oportunidad de ubicar una nueva operación cuyo tipo es la clase específica de interés.

DMS Software Reengineering Toolkit es una tecnología de compilación generalizada que proporciona servicios básicos de análisis sintáctico, construcción / navegación AST, creación / navegación de tablas de símbolos, flujo de control, flujo de datos y construcción de gráficos de llamadas. DMS tiene un Front End Java opcional que proporciona un analizador completo de Java, crea Java AST y tablas de símbolos, y puede construir un gráfico de llamadas. Java Front End también puede leer archivos .class; no tenías claro si también querías subir a los archivos de la clase, buscando información.

La respuesta que desea no está fuera de la plataforma. Necesita construir un código personalizado para implementar las ideas en el primer párrafo, pero DMS puede proporcionar la mayoría de la materia prima. No proporciona muchos detalles de los archivos .class (estos se usan principalmente para resolver tipos en el código fuente).


Puede probar JavaDepend , proporciona muchas características necesarias para las dependencias y las métricas, también proporciona un CQL como SQL para solicitar su código base.



Puede usar el conjunto de herramientas java-callgraph para crear callgraphs estáticos y dinámicos lo suficientemente precisos para Java.