traducir pointer example java optimization compiler-construction code-analysis java-bytecode-asm

example - nullpointerexception java



Alias ​​Analysis en Java (5)

¿Puede alguien señalarme un marco o una implementación de análisis de alias para Java? Miré el marco asm pero solo proporciona análisis de flujo de datos y análisis de flujo de control.

Actualización : Es curioso, pero ¿alguien sabe si Findbugs realiza un análisis de alias?



Creo que esta es una pregunta bastante importante ya que el análisis de análisis de puntos / alias es una pieza fundamental de la mayoría de las tareas de análisis de programas. Así que aquí está mi intento de una lista más completa de marcos para Java. Algunos son más completos que otros y esta es un área de investigación activa, por lo que puede haber fallado algunos. Es difícil decir qué implementación es la mejor, pero DOOP y SPARK parecen ser opciones populares entre los académicos.

  1. Hollín (CHISPA)
    • Lanzado antes de PADDLE, pero todavía utilizado activamente por la comunidad de hollín. SPARK está completamente integrado en el hollín y funciona bien para el análisis insensible al contexto.
    • Papeles: [1]
    • Recursos: [1] , [2]
  2. Hollín (PADDLE)
    • Publicado en 2005-2008. El hollín incluye la interfaz frontend de PADDLE, pero no el back-end . El proyecto ya no se mantiene (no pude hacerlo funcionar con las últimas versiones de Soot). Representación de conjuntos basada en BDD admitida y múltiples abstracciones de sensibilidad al contexto para el análisis en hollín.
    • Papeles: [1] , [2] , [3] , [4]
    • Recursos: [1]
  3. bddbddb
    • Una especificación basada en un registro de datos declarativo que transforma el análisis en operaciones basadas en BDD eficientes.
    • Papeles: [1] , [2]
    • Recursos: [1]
  4. ACORDE
    • CHORD ofrece varios puntos estándar: opciones de análisis para el contexto y el análisis insensible al contexto.
    • Recursos: [1] , [2]
  5. WALA
    • WALA tiene una implementación del algoritmo de flujo de datos Interprocedural Distributive Environment (IDE).
    • Papeles: [1]
    • Recursos: [1] , [2]
  6. DOOP
    • Una implementación declarativa basada en el registro de datos publicada bajo la licencia MIT, pero requiere el marco patentado LogicBlox Datalog. Creo que este proyecto actualmente tiene el derecho de ser el marco más rápido y versátil disponible. También es un proyecto muy activo y se está adoptando bien en la comunidad de investigación.
    • Papeles: [1] , [2] , [3] , [4] , [5]
    • Recursos: [1] , [2] , [3] , [4]
  7. Atlas (puntos a la caja de herramientas)
    • Lanzado en 2016 por mí mismo . Análisis simple de puntos de estilo de Andersen para Atlas .
    • Points-To Toolbox lanzado bajo la Licencia MIT, pero requiere un framework Atlas propio.
    • Recursos: [1]
  8. ESCAFANDRA AUTÓNOMA
    • Un solucionador basado en restricciones para el análisis de puntos sensibles al contexto.
    • Papeles: [1]

Herramientas adicionales de bonificación para tratar con bibliotecas de terceros.

  1. Averroes
    • Genera resúmenes de códigos de byte Java de bibliotecas de terceros.
    • Papeles: [1] , [2]
    • Recursos: [1]
  2. Flow Miner
    • Genera resúmenes XML de flujos y propiedades de bibliotecas de terceros.
    • Papeles: [1]
    • Recursos: [1]

Hay doop que vi en un OOPSLA, pero no sé en qué estado está.

No conozco otras implementaciones, solo una tonelada de papeles.


Nuestro DMS Software Reengineering Toolkit y su Java Front End podrían usarse para construir esto.

DMS proporciona análisis de propósito general, creación de tablas de árbol / símbolos y capacidades de análisis de flujo (flujo de control, flujo de datos, puntos, gráfico de llamadas, ...). Al conectar una interfaz a esta maquinaria, se pueden implementar análisis específicos del lenguaje sin tener que construir la mayoría de la maquinaria desde cero. Estos han sido utilizados para hacer análisis globales de puntos y llamar la construcción de gráficos en aplicaciones C muy grandes, y controlar el análisis de flujo en C ++.

Para Java, tenemos un flujo de control local de método implementado y algunos aspectos del flujo de datos locales. Para hacer un buen análisis de alias, necesitarás completar la construcción del gráfico de llamadas.


Una posibilidad es Sawja , implementado en OCaml. No parece contener un análisis de alias todavía, pero ofrece bloques de construcción para hacer uno.

Con respecto a su actualización, la charla de Google de Bill Pugh suena como Findbugs busca patrones específicos en el código sin resolver punteros. Por supuesto, eso fue en 2006, entonces quién sabe qué ha pasado desde ... El tiempo vuela rápido.