2009-12-01 1 views
12

Je ne sais pas à quel point cela serait utile, mais j'ai pensé qu'il serait peut-être intéressant de visualiser les objets utilisés dans mon programme et les objets qui sont référencés d'où. Je suppose que cela générerait des données qui seraient utilisées par un programme comme graphviz. Y a-t-il des outils qui font cela, sinon comment serait-ce difficile de le faire moi-même? Idéalement, cela fonctionnerait pour n'importe quel programme arbitraire, mais si nécessaire, je pourrais apporter quelques modifications au code (comme ajouter un appel dumpObjects() ou autre)Existe-t-il des outils pour visualiser les objets utilisés dans un programme?

Je suis intéressé à le faire pour Java, mais s'il y a sont des solutions pour d'autres langues s'il vous plaît les poster aussi.

+0

Ouais, j'ai longtemps voulu quelque chose comme ça en C#; essayé de travailler dessus mais il a fallu un profiler. En Java, vous pouvez générer les informations pertinentes via AOP; C# n'a pas un grand soutien pour ça. –

+0

La question est assez ancienne mais toujours pertinente. Un tel outil serait bien de trouver pourquoi certains objets ne sont pas collectés et de résoudre les fuites de mémoire. Profilers sont ok, mais le problème est que l'arrêt à un niveau, le graphique entier pourrait vous aider à trouver des problèmes qui existent dans plus d'un niveau. Un filtre sur l'objet affiché pourrait aider à le garder propre et lisible. – bracco23

Répondre

9

Un profileur vous permettra de voir quels objets sont créés lors de l'exécution. Ceci est la sortie de JProfiler par exemple:

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

+0

JProbe est un autre profileur doté d'un type similaire de fonctionnalité de profilage de la mémoire. Je l'ai utilisé il y a ~ 10 ans pour corriger du code Java écrit par des gens qui pensaient à tort qu'il n'était pas possible d'avoir des fuites de mémoire en Java. Pour trouver des pistes que vous prenez un "instantané" à un point particulier, effectuez un ensemble d'opérations dans votre programme que vous pensez peut-être fuir et ensuite retourner le programme à son état d'origine. Tous les objets créés après l'instantané pointé par des objets créés avant l'instantané sont des objets susceptibles de fuir. –

0

pas sûr si c'est ce que vous visez, mais Doxygen fera à peu près tout cela.

il faudra un tas de code de compilation et le transformer en html référencé, rtf de pdf. terminé appelera l'arbre pour chaque fonction et "référencé par" pour chaque variable

+1

Désolé, je voulais dire que les objets étaient utilisés lors de l'exécution. – swampsjohn

2

Sun ont développé le VisualVM qui comprend le profilage de la mémoire et le processus. Il prend également en charge les plugins pour la technologie tels que OSGi.

+0

Nouveau lien de travail: https://visualvm.java.net/ – Jayesh

0

Pour visualisation des structures (y compris les graphes d'objets) graphique, il y a beaucoup d'outils sur GraphViz: http://www.graphviz.org/

0

Il est le Object Graph Visualizer qui affiche des classes et des objets en 3D. Pour l'instant, il manque une API pour automatiser l'initialisation, mais il ne devrait pas être trop difficile d'ajouter cette fonctionnalité. Code source également sur Github.

Edit: Il y a travail déjà accompli dans cette direction apparemment: https://eprints.hsr.ch/491/

OGV

Questions connexes