2011-02-09 18 views
18

Lo que me gustaría hacer es escanear un conjunto de clases 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, crea una instancia de una cierta clase). Quiero saber el número de línea y los argumentos proporcionados.Análisis estático del gráfico de llamadas Java

¿He comenzado 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 una herramienta o código de ejemplo, pero no he encontrado nada todavía. 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á la pregunta existente "How to Generator a Java Call Graph", porque suena idéntica, pero no es para nada lo que necesito.

+1

En realidad, parece que la segunda parte de la respuesta aceptada (sobre la búsqueda de todas las referencias) es, de hecho, lo que desea. –

+0

Necesito un código que hace esto como parte de un proceso automatizado. –

+1

Mark, ¿entendieron esto trabajando con Soot? Desafortunadamente no tuve éxito porque no pude establecer el punto de entrada con éxito en una clase que no tiene un método principal. ¿Cómo te ha ido con esto? – Joeblackdev

Respuesta

2

Parece que desea 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, construcción de tablas de símbolos/navegación, flujo de control, flujo de datos y construcción de gráficos de llamada. DMS tiene un Java Front End 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á disponible. 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).

4

hollín debe permitir que usted pueda lograr fácilmente lo que buscas: http://www.sable.mcgill.ca/soot/

Se puede construir gráficos de llamadas precisas de forma totalmente automática.

se puede encontrar toda la documentación necesaria aquí: http://www.sable.mcgill.ca/soot/tutorial/index.html

Además, hay una lista de correo activa de hollín.

+0

Tengo el jimple de apk pero no puedo construir el gráfico de llamadas usando la línea de comando. Ayuda requerida –

4

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

5

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

Cuestiones relacionadas