2011-09-13 4 views
5

Durante il debug di un'applicazione C/C++, è possibile creare un controllo di un cast di indirizzi su un tipo di puntatore e quindi visualizzare il contenuto di una struttura anche quando non rientra nell'ambito. È possibile ottenere qualcosa del genere in Java?
Diciamo che sono in un metodo, aggiungo un orologio a qualcosa come "& questo" e poi quando lascio il metodo di classe posso ancora vedere il suo contenuto anche se è fuori portata?java debugging - guarda una variabile fuori ambito

Sono quasi sicuro che la risposta alla mia domanda è "no", quindi sono principalmente interessato a "Perché no?" spiegazione. Si tratta di una limitazione JVM? Una limitazione della JPDA? C'è un posto migliore per porre una domanda così specializzata?

risposta

1

In C/C++ si sta guardando (l'area indicata da) un puntatore arbitrario, che gira su tale variabile.

In Java non ci sono indicazioni. È possibile solo watch una variabile. Fuori ambito non esiste.

Perché vorresti guardarlo comunque? Se ci metti sopra un orologio, viene guardato correttamente quando è in ambito.

+0

Gli oggetti sono fuori dall'ambito. Diciamo che ho un grande grafico di oggetti e un complicato algoritmo che lo elabora. Voglio sapere in quale fase l'algoritmo modifica un particolare oggetto nel mio grafico. Mi piacerebbe attraversarlo tenendo d'occhio quello che sta succedendo con l'istanza a cui sono interessato. –

+0

Hmmm ... sì, mio ​​male. Ma ci deve essere qualche riferimento che è nello scope da cui quell'oggetto è raggiungibile. Immagino che tu debba guardare usando quell'oggetto che è scope, scavando nell'oggetto di interesse. Posso vedere che non è conveniente, e talvolta non è nemmeno supportato. –

0

Non è possibile visualizzare una variabile che non è nell'ambito.

È tuttavia possibile guardare lo stesso oggetto, se si trova un'altra variabile che punta ad esso.

Non ha senso guardare un oggetto che non è referenziato da nessuna parte (non può influenzare in alcun modo l'esecuzione del programma, non può più essere modificato, sarà raccolto e la memoria riutilizzata da qualcosa di completamente diverso).

Gli strumenti di debug a livello di Java funzionano ancora sulla gestione della memoria JVM, quindi è necessario un riferimento valido a un oggetto, non è possibile sbirciare in aree di memoria casuali.

+0

Non penso che tu capisca la domanda. L'oggetto ha ancora dei riferimenti ad esso, non solo dalla classe attuale che sto attraversando in questo momento. Diciamo che sto superando 20 chiamate di metodo e voglio vedere quale di esse modifica questo oggetto –

+0

Penso che si possa fare solo trovando un riferimento che esiste in tutti questi 20 metodi (magari da qualche parte nello stack di chiamate) e poi guardare quello. – Thilo