3

我正在为 Java 开发人员使用 Eclipse IDE

版本:Helios Service Release 1 Build id:20100917-0705

在使用tomcat 7.0.37远程调试Web应用程序时,当我进行一些更改时,即使是一行,更改也无法进入运行时,因此我需要重新编译并重新部署war应用程序。浪费了很多时间。消息:

Hot code replace failed - Delete method not implemented

我不明白这个消息。

有人知道如何在调试模式下自动反映代码更改的秘密吗?谢谢。

4

3 回答 3

3

我发现要使热代码替换工作,被修改/替换的代码必须在执行堆栈中。因此,您可以热替换对已停止的方法所做的更改,但是一旦您退出该方法,就无法热替换对该方法的更改......除非您在连续调用时首先停止返回该方法方法。

于 2013-04-04T15:20:18.950 回答
1

使用标准 JVM(Oracle 的),您只能修改现有方法。不支持添加和删除方法,以及更改类的结构(移动方法、字段)。为此,请前往 JRebel!

需要注意的一件事是,在某些方法中对看似“正常代码”的更改实际上需要 Java 编译器添加或删除方法 - 因此它会失败。例如,如果您在内部类中访问外部类中的私有字段,则会发生这种情况——java 编译器将需要向外部类添加合成访问器方法以让内部类访问这些字段——因此将无法进行热代码替换。此外,如果您删除了一些访问此类字段的代码,java 编译器希望删除相应的合成访问器方法,这也会失败。

于 2015-04-19T02:02:04.457 回答
-2

我认为没有办法反映调试模式下的代码更改

  • 调试模式是跟踪程序流程并查找特定代码段是否有任何问题或错误......
  • 它只是指向在你的tomcat中运行的eclipse中的代码行,即。eclipse 中的代码不用于运行应用程序您已安装或放入 tomcat 的代码运行

因此您在 Eclipse 中所做的更改无法反映在 tomcat 代码中

于 2013-04-04T04:34:38.783 回答