2010-12-01 15 views
5

Uso eclipse (para escribir, depurar) como un IDE. En el modo de depuración cuando realizo algunos cambios, como inicializar una variable local, se reflejan automáticamente.¿Qué cambios de código se reflejan automáticamente en eclipse en modo de depuración?

Pero otros cambios como cambiar el valor de una variable estática; a veces recibo un mensaje que dice que necesito reiniciar la VM y otras veces no.

Ahora la pregunta es qué tipo de cambios se reflejan automáticamente y qué no.

Uso la depuración remota, pero ¿habrá alguna diferencia al ejecutar el programa desde eclipse?

Respuesta

2

No es la función IDE, sino la característica VM de depuración remota. VM ahora puede manejar cambios simples en la lógica dentro de los métodos de inicializadores de variables, pero no puede tratar con la estructura de clases modificada.

La recarga se trata normalmente, cuando su estructura de clase no cambia: no elimina ni agrega miembros, métodos o clases internas, porque la adición de miembros o clases internas cambia el tamaño asignado para la memoria de clase. Los métodos no cambian el tamaño de la memoria, pero cambian su estructura.

Here puede encontrar algunas explicaciones.

3

Estás viendo Hotswap en acción. Está limitado a cambiar los cuerpos del método solamente. Más información here.

0

En la depuración remota, el reemplazo de código no es posible en absoluto porque eclipse no puede intercambiar archivos de clase dentro de una JVM diferente.

El depurador remoto se conecta a una máquina virtual diferente y supervisa el código que se ejecuta dentro de esa máquina remota. Solo los archivos fuente son locales.

+0

derecho! lo que hago es compilar mis archivos de clase en la máquina remota, desde donde se ejecuta la JVM. Y solo depurar remotamente. –

0

Las variables estáticas son variables de clase que se instancian una vez que la clase. Se crean instancias en el tiempo de carga de la clase. Por lo tanto, el cambio de variables estáticas requerirá que la máquina virtual vuelva a cargar e instanciará la variable estática modificada.

Eso es todo lo que puedo proporcionar para su pregunta.

0

HotSwap es muy limitado, solo puede volver a cargar cambios simples en el cuerpo del método.

Eche un vistazo a JRebel, puede recargar otros cambios de código también (como agregar/eliminar campos/métodos/anotaciones/valores enum, etc.). Ver su detallado feature list.

(Tenga en cuenta que JRebel es un producto comercial, con licencias libres disponibles para los desarrolladores de software libre y Scala.)

Cuestiones relacionadas