当前位置: 首页 > 面试题库 >

在Eclipse调试器中,可以将“热代码”替换为正在运行的JVM中的哪些变化?

黄弘新
2023-03-14
问题内容

在Eclipse中,如果您在“调试”下运行程序,则可以对代码进行更改,大多数情况下,更改将立即生效。

但是,有时它不会-在这种情况下,它会弹出一条消息,或在“调试”窗格中的线程旁边显示“(可能不同步)”。

是什么决定了可以热交换的更改类型? 我注意到这些更改通常会失败:

  • 引入新的匿名内部类
  • 在实例化类时更改类(重命名/添加/删除字段和方法)
  • 添加一个try-catch块

但有时似乎几乎是随机的。确定代码是否可以替换的背后的逻辑是什么?


问题答案:

方法语句(过程代码)起作用。与添加,删除或更改类模式有关的所有操作均不起作用。因此,无需html" target="_blank">修改继承,字段,提取方法,更改签名等。

如果同时执行任何禁止的操作,通常热交换方法语句将不起作用。可以这么说,然后,热交换连接被“断开”。

我不确定的一件事是匿名类。从未尝试将其与热交换结合使用。

编辑:在zeroturnaround那里的家伙已经在其功能部分中编译了一个列表,这些列表是jvm调试器不能直接使用来推广其产品的:http
:
//www.zeroturnaround.com/jrebel/features/。无论您是否喜欢该工具,列表都反映了我的经验。



 类似资料:
  • 问题内容: 我的Java应用程序开始定期崩溃,原因是SIGSEGV和堆栈数据转储以及文本文件中的信息负载。 我已经调试了gdb中的C程序,并且已经从我的IDE中调试了Java代码。我不确定如何在正在运行的Java程序中处理类似C的崩溃。 我假设我不在这里查看JVM错误。其他Java程序运行良好,Sun的JVM可能比我的代码更稳定。但是,我不知道如何用Java代码引起段错误。肯定有足够的可用内存,当

  • Java8引入了重要的新语言特性,如lambda表达式。 语言中的这些变化是否伴随着编译字节码中的重大变化,从而阻止它在不使用某些反向翻译器的情况下在Java7虚拟机上运行?

  • 问题内容: Java 8引入了重要的新语言功能,例如lambda表达式。 语言的这些变化是否伴随着已编译字节码的重大变化,从而阻止了它在Java 7虚拟机上运行而无需使用某些逆向转换程序? 问题答案: 不可以,在源代码中使用1.8功能要求你以1.8 VM为目标。我刚刚尝试了新的Java 8版本,并尝试使用进行编译,但编译器拒绝了:

  • 问题内容: 通过调试器运行时,某些占用大量CPU的例程会大大降低速度。为什么是这样? 目前,我只是使用IntelliJ逐步执行JBoss中运行的代码。启动JBoss时,使用以下选项: 有没有办法加快执行速度?还是加快我不需要执行的某些方法的执行速度? 更新 :看来我是否不进入CPU密集型例程(即:仅在例程后立即设置一个断点运行),那么执行时间就好像不在调试器中一样。 问题答案: 通过调试器运行时,

  • 问题内容: 我有一个包含200多个测试类别的近500个单独测试的项目。这些测试中有一些在完成测试后并不能很好地关闭它们自己的状态,在Eclipse中这会导致某些测试失败。通过Ant从命令行运行测试套件时,所有测试均通过。 我可以在Eclipse中以某种方式启用“测试隔离”吗?我不在乎是否需要更长的时间。 从长远来看,我会清理行为异常的测试,但短期而言,我想使测试正常工作。 问题答案: 如果在Ecl

  • 我正在用下面的代码将数据从mysql加载到Ignite缓存中。代码以客户端模式Ignite运行,并将数据加载到Ignite集群中。 > 代码的哪些部分将在服务器端运行? 将数据加载到缓存中的工作机制看起来像map-reduce,那么,哪些任务被发送到服务器?SQL? 我想特别问一下:下面的代码是在客户端运行还是在服务器SDIE运行? 下面是将数据加载到缓存中的完整代码