2011-08-30 13 views

Respuesta

1

Bueno ... es una buena pregunta, en primer lugar ... Dudo mucho si hay cualquier utilidad disponible en el mercado ... sin embargo, hay maneras de evitar esto. ... como utilizar una herramienta de depuración en uno de tus IDE favoritos como Eclipse y Netbeans ...

3

Las herramientas de cobertura y perfilado emplean principalmente dos técnicas: sondear periódicamente la JVM para el estado de varios subprocesos o instrumentar el bytecode de la aplicación para expulsar de los datos relevantes de JVM.

No hay soporte para la API directa en el propio lenguaje Java, sin embargo hay muchas herramientas que puede explotar:

  1. Usted puede coger el hilo vertederos, utilizando jstack o herramientas similares, les ahorrará Toa archivo, a continuación, analizar (o escriba un script/programa para analizar), esto es un sondeo.
  2. Use ASM o BCEL para modificar el bytecode de su aplicación, esto es push pero es muy difícil de hacer.
  3. Utilice AspectJ, utilizando el agente de tejido de tiempo de carga, es solo un parámetro de línea de comando para habilitarlo.

La solución 3 es mucho más fácil, limpia y versátil.

Para imprimir, en tiempo de ejecución, cualquiera que sea el método que se denomina como consecuencia de la ejecución de un método es un aspecto trazado sencillo, algo similar a:

public aspect TraceCalls { 
    pointcut aCall : call(* *(..)); 
    pointcut inside : cflow(execution(public MyClass.MyMethod(..))); 
    before() : aCall() && inside() { 
    System.out.println(thisJoinPoint); 
    } 
} 

Obviamente, se puede acceder a muchos más datos, imprimir en un archivo, darle formato, etc ...

(Tenga en cuenta que he escrito este código aquí, por lo que podría estar lleno de errores de sintaxis)

0

La forma correcta de hacerlo es con un analizador estático, que mira tu código y determina el conjunto de posibles llamantes. Esto le diría lo que puede llamar a un método bajo cualquier circunstancia (conservadora). Nuestro DMS Software Reengineering Toolkit con su Java Front End se puede configurar para hacer esto. Tiene soporte para puntos computacionales para análisis; las llamadas a métodos son llamadas esencialmente a través de vectores de métodos de clase.

Como sustituto del hombre pobre, puede utilizar una herramienta de creación de perfiles que capture el árbol de llamadas. Esto solo le permitirá realizar llamadas ejecutadas por un programa en particular, a diferencia de todos los posibles contextos de llamadas.

Nuestro Java Timing Profiler producirá un árbol de llamadas.

Cuestiones relacionadas