【问题标题】:How to modify Java code while running in debug mode?在调试模式下运行时如何修改 Java 代码?
【发布时间】:2012-09-21 14:01:29
【问题描述】:

如何在 Eclipse 中启用 Notch 在this video 中所说的“运行时调试”?

作为测试,我希望能够编辑以下代码的输出,并在其运行时将其更改为“Hello Runtime Debugging”。

public class HelloWorld {
    public static void main(String[] args) throws InterruptedException {
        doIt();     
    }

    private static void doIt() throws InterruptedException {
        for (int i = 0; i < 1000; ++i) {
            System.out.println("Hello World " + i);
            Thread.currentThread().sleep(100);
        }
    }
}

编辑:我修改了代码,现在我得到了我想要的结果。 Suraj Chandran 下面的回答对此进行了解释。

private static void doIt() throws InterruptedException {
    for (int i = 0; i < 1000; ++i) {
        print(i);
        Thread.currentThread().sleep(100);
    }
}

private static void print(int i) {
    System.out.println("Hello Sir " + i);
}

【问题讨论】:

    标签: java eclipse debugging


    【解决方案1】:

    Eclipse 在调试期间支持热交换代码,开箱即用。

    调试时,只要修改任意代码并保存,Eclipse会自动将修改后的代码传输到目标VM中。

    请注意,您不能对代码进行结构更改,例如添加新方法、更改方法签名或添加新字段。但是你可以在方法中更改代码。

    编辑:请注意,在调试期间更改代码将使该方法从头开始重新执行,并重置该方法中的局部变量。

    【讨论】:

    • 你是怎么做到的?我放了一个断点,假设当循环计数为 23 时,它会运行“Hello World 22”“Hello World 23”我将文本更改为其他内容,我按恢复,现在我得到“Hello Something else 0”重新启动程序?计数一下子变成了 0。
    • 它不会重新启动程序,它会从头开始重新执行当前方法。所以它会再次重置所有变量
    • 啊,这就解释了。你介意把它放在答案中吗?
    【解决方案2】:

    您需要确保选中 Project > Build Automatically。 否则可能无法正常工作。

    【讨论】:

      【解决方案3】:

      启用 Project-> Build Automatically 后,调试模式下的热交换代码对我来说没问题

      【讨论】:

        【解决方案4】:

        我可能误解了这个问题,但是如果您在 Eclipse 中以调试模式(运行/调试)运行程序,您可以在程序运行期间编辑方法的内容(如果 JVM 支持的话)。通常,您不能更改导入、方法签名、类定义等,只能更改方法的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多