Como depurar / alterar o código Java enquanto o programa está sendo executado?

15

Acabei de ver um vídeo mostrando como o Notch (da fama do Minecraft) está depurando e alterando o Minecraft enquanto está em execução. Ele pausa o jogo, altera algo no código e depois pausa o jogo, onde a alteração entra em vigor imediatamente sem a necessidade de reiniciar o programa.

Como é que isso funciona? Que tipo de técnica é usada para conseguir isso?

RoToRa
fonte
1
E assim é a extensão do processo de QA do Notch.
DeadMG
1
De acordo com um Q & A mais velha no Stack Overflow , isso poderia ser feito com ACDP característica que faz "HotSwap" Classe do Arquivo de Substituição
mosquito
Lol, também veio aqui depois desse vídeo.
Ciro Santilli publicou em 6/04/16

Respostas:

4

Java pode fazer hot-swap fora da caixa. Se você usar um IDE como o Eclipse, ele funcionará para alterar os corpos dos métodos. Se você deseja aplicar outras alterações de código, poderá usar uma ferramenta. JRebel é um produto que suporta mais casos.

Não quero fazer marketing para esse produto, mas pessoalmente não conheço nenhuma outra alternativa. No site da JRebel, há uma boa comparação de recursos .

Espero que ajude.

John Regular
fonte
+1 O JRebel é ótimo para "hot coding" fora de um IDE como o Eclipse.
Jalayn
4

É chamado de substituição de código quente e permite que um IDE altere o código em execução ao vivo por meio da interface de depuração. É suportado pela Sun JVM desde o Java 1.4.1

No entanto, a menos que você use a extensão JRebel JVM (comercial), ela estará limitada a alterações dentro dos corpos do método. Se você adicionar / remover métodos ou classes ou alterar assinaturas, precisará reiniciar a JVM.

Michael Borgwardt
fonte
O link correto está agora: wiki.eclipse.org/FAQ_What_is_hot_code_replace%3F
Pierre