2009-12-01 11 views
12

No estoy seguro de lo útil que sería, pero pensé que podría ser ordenada para visualizar los objetos que se utilizan en mi programa y que los objetos se están referenciados desde dónde. Supongo que generaría algunos datos que serían utilizados por un programa como graphviz. ¿Hay alguna herramienta que haga esto? De lo contrario, ¿qué tan difícil sería hacerlo yo mismo? Idealmente esto funcionaría para cualquier programa arbitrario, aunque si fuera necesario podría hacer algunas modificaciones al código (como agregar una llamada a dumpObjects() o lo que sea)¿Hay alguna herramienta para visualizar los objetos que se utilizan en un programa?

Estoy interesado en hacer esto para Java, pero si hay son soluciones para otros idiomas, por favor publíquelos también.

+0

Sí, he deseado siempre para algo como esto en C#; intenté trabajar en ello pero requirió un generador de perfiles. En Java puede generar la información relevante a través de AOP; C# no tiene un gran soporte para eso. –

+0

La pregunta es bastante antigua, pero sigue siendo relevante. Tal herramienta sería agradable para encontrar por qué algunos objetos no se recogen basura y resolver fugas de memoria. Los profilers están bien, pero el problema es que al detenerse en 1 nivel, todo el gráfico podría ayudarlo a encontrar problemas que existen en más de un nivel. Un filtro en el objeto que se muestra podría ayudar a mantenerlo limpio y legible. – bracco23

Respuesta

9

Un perfilador le permite ver qué objetos se crean en el tiempo de ejecución. Esta es la salida de JProfiler por ejemplo:

jprofiler heap walker http://www.ej-technologies.com/products/jprofiler/images/screenshots/heap_walker_references_fsb.png

+0

JProbe es otro generador de perfiles que tiene un tipo similar de función de generación de perfiles de memoria. Lo usé ~ hace 10 años para arreglar algunos códigos Java escritos por personas que equivocadamente pensaron que no era posible tener pérdidas de memoria en Java. Para encontrar archivos, tome una "instantánea" en un punto en particular, haga un conjunto de operaciones en su programa que crea que pueden tener fugas y luego devuelva el programa a su estado original. Cualquier objeto creado después de la instantánea apuntada por objetos creados antes de la instantánea son posibles objetos con fugas. –

0

no está seguro de si eso es lo que usted apunta, pero Doxygen va a hacer casi de todo eso.

tomará un montón de compilación del código y convertirlo en una referencia cruzada html, rtf del pdf. completado va a llamar al árbol para cada función y "hace referencia a" para cada variable

+1

Lo siento, quise decir que los objetos se utilizan en tiempo de ejecución. – swampsjohn

2

Sun han desarrollado el VisualVM que incluye la memoria y el proceso de perfilado. También es compatible con complementos para tecnología como OSGi.

+0

Nuevo enlace de trabajo: https://visualvm.java.net/ – Jayesh

0

Para estructuras gráfico Visualizando (incluyendo gráficos de objetos), hay un montón de herramientas basadas en GraphViz: http://www.graphviz.org/

0

Existe la Object Graph Visualizer que muestra clases y objetos en 3D. Por ahora carece de una API para automatizar la inicialización, sin embargo, no debería ser demasiado difícil agregar esta funcionalidad. Código fuente también en Github.

Editar: Ya hay trabajo que se realiza en esa dirección, aparentemente: https://eprints.hsr.ch/491/

OGV

Cuestiones relacionadas