2009-12-01 15 views
12

Non sono sicuro di quanto sarebbe utile, ma ho pensato che potesse essere utile visualizzare gli oggetti utilizzati nel mio programma e quali oggetti vengono referenziati da dove. Immagino che genererebbe alcuni dati che sarebbero usati da un programma come graphviz. Ci sono strumenti che fanno questo, altrimenti quanto sarebbe difficile farlo da solo? Idealmente questo funzionerebbe per qualsiasi programma arbitrario, anche se, se necessario, potrei apportare alcune modifiche al codice (come aggiungere una chiamata dumpObjects() o altro)Esistono strumenti per visualizzare gli oggetti utilizzati in un programma?

Sono interessato a farlo per java, ma se ci sono sono soluzioni per altre lingue, per favore pubblica anche quelle.

+0

Sì, ho a lungo voluto per qualcosa di simile in C#; ho provato a lavorarci ma ha richiesto un profiler. In Java è possibile generare le informazioni rilevanti tramite AOP; C# non ha un grande supporto per questo. –

+0

La domanda è piuttosto vecchia ma ancora pertinente. Un tale strumento sarebbe bello trovare il motivo per cui alcuni oggetti non vengono raccolti e risolti da perdite di memoria. I profiler sono ok, ma il problema è che la fermata a 1 livello, l'intero grafico potrebbe aiutarti a trovare i problemi che esistono in più di un livello. Un filtro sull'oggetto mostrato potrebbe aiutare a mantenerlo pulito e leggibile. – bracco23

risposta

9

Un profiler consentirebbe di vedere quali oggetti vengono creati in fase di esecuzione. Questa è l'uscita di JProfiler per esempio:

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

+0

JProbe è un altro profiler che ha un tipo simile di funzionalità di profilazione della memoria. L'ho usato circa 10 anni fa per sistemare del codice Java scritto da persone che pensavano erroneamente che non fosse possibile avere perdite di memoria in Java. Per trovare leas si prende una "istantanea" in un punto particolare, si fa una serie di operazioni nel programma che si pensa possano perdere e quindi si riporta il programma al suo stato originale. Qualsiasi oggetto creato dopo lo snapshot a cui fanno riferimento gli oggetti creati prima dello snapshot sono potenziali oggetti che perdono. –

0

non sicuro se questo è ciò che si sta mirando, ma Doxygen farà praticamente tutto questo.

ci vorrà un mucchio di codice di compilazione e trasformarlo in html, rtf di pdf referenziato. completato chiamerà albero per ogni funzione e "referenziato da" per ogni variabile

+1

Spiacente, intendevo gli oggetti utilizzati in fase di esecuzione. – swampsjohn

2

Sun hanno sviluppato la VisualVM che include memoria e profilatura. Supporta anche plugin per tecnologia come OSGi.

+0

Nuovo link di lavoro: https://visualvm.java.net/ – Jayesh

0

C'è la Object Graph Visualizer che visualizza classi e oggetti in 3D. Per ora manca un'API per automatizzare l'inizializzazione, tuttavia non dovrebbe essere troppo difficile aggiungere questa funzionalità. Codice sorgente anche su Github.

Edit: C'è già lavoro svolto in questa direzione a quanto pare: https://eprints.hsr.ch/491/

OGV

Problemi correlati