在调试模式下eclipse中会自动反映哪些代码更改?

我使用eclipse(编写,调试)作为IDE。 在调试模式下,当我进行一些更改时,比如初始化局部变量,它们会自动反映出来。

但其他变化,如改变静态变量的值; 有时候我会收到一条消息,说我需要重新启动虚拟机,有时我不会。

现在的问题是什么样的变化会自动反映出来,什么不变。

我使用远程调试,但是从eclipse运行程序会有什么不同吗?

它不是IDEfunction,而是远程调试的VMfunction。 VM现在可以在变量初始化程序的方法内处理逻辑中的简单更改,但不能处理更改的类结构。

当您的类结构没有改变时,正常处理重新加载:您不删除或添加成员,方法或内部类,因为添加成员或内部类会更改为类内存分配的大小。 方法不会更改内存大小,但会更改其结构。

在这里你可以找到一些解释。

你看到Hotswap在行动了。 它仅限于更改方法体。 更多信息在这里 。

在远程调试中,根本不可能进行热代码替换,因为eclipse无法在不同的JVM中交换类文件。

远程调试器连接到不同的虚拟机,并监视在该远程计算机内执行的代码。 只是源文件是本地的。

静态变量是类变量,它们在类之后实例化。 它们在类加载时实例化。 因此,更改静态变量将要求VM重新加载并实例化已更改的静态变量。

这就是我能为你提出的问题。

HotSwap非常有限,它只能重新加载简单的方法体变化。

看一下JRebel ,它也可以重新加载其他代码更改(比如添加/删除字段/方法/注释/枚举值等)。 查看其详细function列表 。

(请注意,JRebel是商业产品,可为OSS和Scala开发人员提供免费许可。)