2011-09-13 16 views
5

Al depurar una aplicación C/C++, puedo crear un reloj de una conversión de direcciones a un tipo de puntero y luego ver el contenido de una estructura incluso cuando se sale del alcance. ¿Es posible lograr algo así en Java?
Digamos que estoy en un método, agrego un reloj a algo así como "& esto" y luego, cuando dejo el método de la clase, ¿puedo ver su contenido aunque esté fuera del alcance?depuración de java: observe una variable fuera del alcance

Estoy bastante seguro de que la respuesta a mi pregunta es "no", así que estoy más que interesado en "¿Por qué no?" explicación. ¿Es esto una limitación de JVM? Una limitación JPDA? ¿Hay un lugar mejor para hacer una pregunta tan especializada?

Respuesta

1

En C/C++ usted está viendo (el área apuntada por) un puntero arbitrario, fundido a esa variable.

En Java no hay punteros. Solo puede watch una variable. Fuera del alcance, no existe.

¿Por qué querrías verlo de todos modos? Si le pones un reloj, se mira correctamente cuando está en el alcance.

+0

Los objetos existen fuera del alcance. Digamos que tengo un gran gráfico de objetos y un algoritmo complicado que lo procesa. Quiero saber en qué etapa el algoritmo modifica un objeto particular en mi gráfico. Me gustaría revisarlo para estar al tanto de lo que está pasando con el instalador en el que estoy interesado. –

+0

Hmmm..si, mi mal. Pero tiene que haber alguna referencia que esté en el alcance desde el cual ese objeto es alcanzable. Supongo que necesitas mirar usando ese objeto que es alcance, profundizando hasta el objeto de interés. Puedo ver que no es conveniente, y en algún momento ni siquiera es compatible. –

0

No puede ver una variable que no está en el alcance.

Sin embargo, puede ver el mismo objeto, si encuentra otra variable que lo señale.

No tiene sentido mirar un objeto que no esté referenciado en ninguna parte (no puede afectar la ejecución del programa de ninguna manera, ya no se puede cambiar, se recolectará basura y la memoria se reutilizará por algo completamente diferente).

Las herramientas de depuración de nivel de Java aún funcionan sobre la gestión de memoria de JVM, por lo que necesita una referencia válida para un objeto, no puede echar un vistazo a las áreas de memoria aleatorias.

+0

No creo que entiendas la pregunta. El objeto todavía tiene referencias a él, pero no de la clase actual a la que me estoy dirigiendo en este momento. Digamos que estoy pasando por alto 20 llamadas a métodos y quiero ver cuál de ellas modifica este objeto. –

+0

Creo que solo puedes hacer eso al encontrar una referencia que existe en esos 20 métodos (quizás en algún lugar de la pila de llamadas) y luego mirar ese. – Thilo

Cuestiones relacionadas