2011-08-04 9 views
8

En Eclipse, si ejecuta un programa en "Depurar" puede realizar cambios en el código, y la mayoría de las veces tendrá efecto inmediatamente.En el depurador de Eclipse, ¿qué tipo de cambios se pueden reemplazar en la JVM en ejecución?

A veces, sin embargo, no aparece, en cuyo caso aparece un mensaje o dice "(puede estar desincronizado)" junto a los hilos en el panel Depurar.

¿Qué determina el tipo de cambios que se pueden intercambiar en caliente? me he dado cuenta de estos cambios suelen fallar:

  • introducción de nuevas clases internas anónimas
  • cambio de clases (el cambio de nombre/añadir/quitar campos y métodos) cuando la clase se instancia
  • adición de un bloque try-catch

pero a veces parece ser casi aleatorio. ¿Cuál es la lógica detrás de determinar si el código puede ser reemplazado o no?

Respuesta

9

Sentencias de método (código de procedimiento) trabajo. Todo lo relacionado con agregar, eliminar o cambiar esquemas de clases no funciona. Por lo tanto, no hay modificaciones de herencias, campos, métodos de extracción, cambio de firmas, etc.

Por lo general, las declaraciones de métodos de intercambio activo no funcionan si está haciendo algo prohibido al mismo tiempo. Entonces la conexión de intercambio en caliente está "rota", por así decirlo.

Una cosa que no sé con certeza son las clases anónimas. Nunca lo he intentado en conexión con el intercambio en caliente.

Editar: Los muchachos de zeroturnaround han compilado una lista en su sección de características que el depurador de jvm no puede hacer de la caja para promocionar su producto: http://www.zeroturnaround.com/jrebel/features/. Si te gusta la herramienta o no, la lista refleja mi experiencia.

+0

+1 para JRebel, me encanta esa cosa – Andy

Cuestiones relacionadas