【问题标题】:Eclipse Mars (4.5) hot swap code in debugger not working调试器中的 Eclipse Mars (4.5) 热交换代码不起作用
【发布时间】:2015-09-04 18:57:00
【问题描述】:

所以我更新到 Eclipse Mars (4.5) 并且由于某种原因我无法在调试器中使用热插拔代码。通常我可以这样做:

public static void main(String[] args){
    while(true){
        System.out.println("123");
    }
}

然后如果我在调试模式下启动它,将文本更改为“321”,然后保存,然后它会更新而无需重新启动它。它的行为与在“运行”模式而不是“调试”模式下运行时完全一样。

我尝试过的:

  • 创建一个新工作区,创建一个新项目,使用上面的代码,没有任何反应
  • 安装了多个 JDK,尝试使用 java 6、7 和 8,更改了工作区和/或项目设置以使用不同的 JDK,但没有任何反应(我安装了多个版本的 java 并不重要因为就在我更新 eclipse 的那一刻它停止工作)
  • 尝试卸载删除任何配置文件到 Eclipse(在 Mac 上,这将是 ~/Library 文件夹中每个带有单词“eclipse”的文件/文件夹,运行“查找”搜索以检测所有文件)。然后尝试创建一个新的工作区,现在是项目,代码被剪断,在调试模式下运行,保存时没有任何反应。
  • 还确保我已启用“自动构建”,甚至尝试“清理”它并禁用自动构建,然后保存代码,然后在调试器运行时进行手动构建:没有任何反应

我开始感到绝望,因为如果没有可用的调试模式,我很难完成工作,因此任何正确方向的帮助/提示都会非常感激。

【问题讨论】:

    标签: java eclipse debugging jvm eclipse-mars


    【解决方案1】:

    HotSwap 不适用于静态方法。
    但是它适用于实例方法,因此它适用于以下代码:

    public class Main {
    
        public static void main(String[] args) {
            new Main().f();
        }
    
        public void f() {
            while(true){
                System.out.println("123");
            }
        }
    }
    

    【讨论】:

    • 我不认为它是静态的还是无关紧要的。在没有运气的情况下尝试了上面的代码。通常,当热插拔失败时(例如,您尝试重命名一个方法或类似的东西),它会给您一个警告,告诉您它不能这样做,然后如果您想要更改应用程序,则要求您重新启动应用程序。这个窗口甚至没有打开,当我保存或构建时,什么也没有发生,就像它甚至没有在调试模式下运行一样。
    【解决方案2】:

    好的,我终于找到了问题所在。似乎您无法在循环运行时对其进行编辑。假设你有一个这样的循环:

    public static void main(String[] args){
        while(true){
            System.out.println("123");
        }
    }
    

    那么你不能编辑“123”字符串。 您可以像这样编辑在循环内调用的方法:

    public static void main(String[] args){
        while(true){
            System.out.println(methodA());
        }
    }
    
    public static String methodA(){
        return "123";
    }
    

    现在您可以编辑字符串“123”,它会更新。 这也适用于无限的“for”循环,所以猜测经验法则是方法体必须在更新之前“重新调用”,而等待下一个循环调用是不够的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      相关资源
      最近更新 更多