oxygen - java remote debug
En el depurador de Eclipse, ¿qué tipo de cambios pueden ser "reemplazados con el código caliente" en la JVM en ejecución? (1)
Sentencias de método (código de procedimiento) funcionan. Todo lo relacionado con agregar, eliminar o cambiar esquemas de clases no funciona. Por lo tanto, no se deben modificar las herencias, los campos, los métodos de extracción, el cambio de firmas, etc.
Por lo general, las declaraciones de métodos de intercambio en caliente 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 chicos de zeroturnaround han compilado una lista en la sección de características que el depurador de jvm no puede hacer para promover su producto: http://www.zeroturnaround.com/jrebel/features/ . Si te gusta la herramienta o no, la lista refleja mi experiencia.
En Eclipse, si ejecuta un programa en "Depurar" puede hacer cambios en el código, y la mayoría de las veces tendrá efecto inmediatamente.
A veces, sin embargo, no lo hará, en cuyo caso aparecerá un mensaje o dice "(puede estar fuera de sincronización)" junto a los hilos en el panel de depuración.
¿Qué determina el tipo de cambios que pueden intercambiarse en caliente? Me he dado cuenta de que estos cambios generalmente fallan:
- introduciendo nuevas clases internas anónimas
- cambio de clases (cambio de nombre / adición / eliminación de campos y métodos) cuando se crea una instancia de la clase
- agregando 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?