¿Cómo depurar / cambiar el código Java mientras se ejecuta el programa?

15

Acabo de ver un video que muestra cómo Notch (de la fama de Minecraft) está depurando y cambiando Minecraft mientras se está ejecutando. Pausa el juego, cambia algo en el código y luego detiene el juego donde el cambio tiene efecto inmediato sin la necesidad de reiniciar el programa.

¿Como funciona esto? ¿Qué tipo de técnica se utiliza para lograr esto?

RoToRa
fuente
1
Y así es el alcance del proceso de control de calidad de Notch.
DeadMG
1
De acuerdo con un anterior Q&A en Stack Overflow , esto podría hacerse con la función JPDA que reemplaza el archivo de clase "HotSwap"
mosquito
Lol, también vine aquí después de ese video.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

4

Java puede hacer un intercambio directo fuera de la caja. Si usa un IDE como Eclipse, funcionará para cambiar los cuerpos de los métodos. Si desea aplicar otros cambios de código, puede utilizar una herramienta. JRebel es un producto que admite más casos.

No quiero hacer marketing para ese producto, pero personalmente no conozco ninguna otra alternativa. En el sitio web de JRebel hay una buena comparación de características .

Espero que ayude.

John regular
fuente
+1 JRebel es ideal para la "codificación activa" fuera de un IDE como Eclipse.
Jalayn
4

Se llama reemplazo de código activo y permite que un IDE cambie el código de ejecución en vivo a través de la interfaz de depuración. Ha sido compatible con Sun JVM desde Java 1.4.1

Sin embargo, a menos que use la extensión JRebel JVM (comercial), está limitada a los cambios dentro de los cuerpos de los métodos. Si agrega / elimina métodos o clases, o cambia las firmas, debe reiniciar la JVM.

Michael Borgwardt
fuente
El enlace correcto es ahora: wiki.eclipse.org/FAQ_What_is_hot_code_replace%3F
Pierre