Comment déboguer / changer le code Java pendant l'exécution du programme?

15

Je viens de voir une vidéo montrant comment Notch (de la renommée de Minecraft) débogue et modifie Minecraft pendant son fonctionnement. Il interrompt le jeu, modifie quelque chose dans le code, puis interrompt le jeu où le changement prend effet immédiatement sans avoir à redémarrer le programme.

Comment cela marche-t-il? Quel type de technique est utilisé pour y parvenir?

RoToRa
la source
1
Et c'est ainsi l'étendue du processus d'AQ de Notch.
DeadMG
1
Selon un ancien Q&A à Stack Overflow , cela pourrait être fait avec la fonctionnalité JPDA qui fait le remplacement de fichier de classe "HotSwap"
gnat
Lol, est également venu ici après cette vidéo.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

4

Java peut effectuer des échanges à chaud dès la sortie de la boîte. Si vous utilisez un IDE comme Eclipse, cela fonctionnera pour changer les corps de méthode. Si vous souhaitez appliquer d'autres modifications de code, vous pouvez utiliser un outil. JRebel est un produit qui prend en charge plus de cas.

Je ne veux pas faire de marketing pour ce produit, mais je ne connais personnellement aucune autre alternative. Sur le site Web de JRebel, il y a une belle comparaison de fonctionnalités .

J'espère que cela pourra aider.

John régulier
la source
+1 JRebel est idéal pour le "codage à chaud" en dehors d'un IDE tel qu'Eclipse.
Jalayn
4

Cela s'appelle remplacer le code à chaud et permet à un IDE de changer le code en cours d'exécution via l'interface de débogage. Il est pris en charge par la JVM Sun depuis Java 1.4.1

Cependant, à moins que vous n'utilisiez l'extension (commerciale) JRebel JVM, elle est limitée aux modifications à l'intérieur des corps de méthode. Si vous ajoutez / supprimez des méthodes ou des classes ou modifiez des signatures, vous devez redémarrer la JVM.

Michael Borgwardt
la source
Le lien correct est maintenant: wiki.eclipse.org/FAQ_What_is_hot_code_replace%3F
Pierre