- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在使用 Intellij IDEA Community Version 的 hotswap 功能时遇到了麻烦。我的是 v 14.1.4。
每次我启动调试并更改 java 代码后,我已经单击重建项目并在确认重新加载类时按"is"。 Intellij 报告已重新加载更改的类,但应用程序结果与以前相同。我只是在尝试最简单的 Java 应用程序(即不在 Tomcat、applet 等场景中),其中包含 System.out.println
、字符串连接等内容。我在 Debug模式下所做的更改是只是方法体代码,而不是方法签名/名称。我无法得到它。
在 Eclipse 中,我直接更改代码并按保存,然后就可以了。
出了什么问题?
(备注:
事实上,我正在尝试使用 DCEVM,它使结构更改成为可能(例如更改类名、方法名、添加方法等),认为它可以解决 Intellij 中发现的热插拔问题。不用说,它没有用。
在eclipse中,我成功地使用了DCEVM,并且可以在调试期间更改方法名称。
我进一步尝试了 hotswap-agent,但仍然没有用;我看到一篇文章说 IDE 必须通过端口 5000 JDPA 连接到 JVM,但无论我如何尝试,Intellij 控制台显示它仍在通过随机端口(下面的 51018)连接:
"C:\Program Files\Java\jdk1.8.0_60\bin\java" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51018...."
连接到目标虚拟机,地址:'127.0.0.1:51018',传输:'socket'
是否可以强制它通过一个特定端口连接?在运行/调试配置中添加 DEBUG_OPT
环境变量不起作用)
最佳答案
在找到 Jetbrains 对 issue request 的反馈后发现这是 Intellij 的设计行为:
换句话说,问题与我如何测试热交换有关:
public class Main {
// /*
public static String getName() {
return "James"; // <=== (2)
}
//*/
public static void main(String[] args) {
System.out.println("Hello " + getName()); // <=== (1)
}
}
由于 Intellij 的行为是“在 VM 退出过时的堆栈框架之前仍然使用旧代码”(与 Eclipse 相比不同的行为),如果您将“Hello”更改为(1) 处的“再见”,新代码永远不会执行——只有当第二次调用 main() 时,新代码才能再次执行,这是不可能的,因为应用程序已经终止
如果是 (2) 被更改(例如,将“James”替换为“Sean”)而不是 (1),在执行游标被断点停止期间放置在 (1)(因此还没有进入 getName()),并且您重新加载该类,您将获得正在运行的新代码(打印“Sean”)
DCEVM 也能完美运行,使用相同的方式测试热插拔
您还可以在堆栈跟踪窗口中使用“drop frame”使当前语句回滚到方法的开头(main() 除外)——事实上,这与 Eclipse 中的行为相同。
关于java - Hotswap/DCEVM 在 Intellij IDEA(社区版)中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507900/
本文整理了Java中org.hotswap.agent.watch.Watcher类的一些代码示例,展示了Watcher类的具体用法。这些代码示例主要来源于Github/Stackoverflow/M
我在 eclipse 和 IntelliJ IDE 中使用了 DCEVM 热插拔技术,这是非常酷的功能。通过在 IDE 中使用 DCEVM,我可以更改源代码,即在运行时添加/删除/编辑方法、类、属性,
我对 GAE 开发还很陌生。只需解决有关设置开发的几个问题。 我目前正在使用 Eclipse 3.7.x、Google Suite Plugin 2.5.2 r37 我找到的相关链接: > http:
有人在生产中使用过带有 DCEVM 和 HotSwap 代理的 JBoss AS 7.1 吗?哪里有教程吗?是否可以通过 HotSwap 代理添加新的包/类,或者只是替换现有的包/类? 很抱歉这个问题
目前我的设置由 vim 和运行 Gradle 任务的单独终端窗口组成。 我想知道是否可以触发 Gradle 守护进程的重新加载/重新编译更改类操作,以便 DCEVM 可以检测到它们并重新加载它们。 最
我想对我的应用程序进行实时测试。为此,我需要在我的测试函数上更改作为 AppDelegate 成员的 CLLocationManager 对象。 如何在不在应用程序目标上添加交换函数的情况下将我的 l
本文整理了Java中org.hotswap.agent.watch.Watcher.addEventListener()方法的一些代码示例,展示了Watcher.addEventListener()的
我正在尝试使用 byte buddy 的 HotSwap 功能。不幸的是我收到了一些错误。我已阅读有关 official website 的文档,而且我知道它仅在程序使用 Java 代理时才有效。我尝
在更改我的代码时,我在尝试使用 DCEVM (8u181) 和 Tomcat (7.0.62.0) 运行 HotswapAgent (1.3.0) 时遇到了以下问题: HOTSWAP AGENT: 1
我正在使用 DCEVM 热插拔代理将 java spring boot 应用程序作为 jar 文件运行。当我更改 jar 文件中的某些类文件时,应用程序不会重新加载这些更改。但是,如果我提取 jar
对于普通的 Java/Swing 应用程序,我目前正在将 ant 构建脚本迁移到 gradle 构建。 虽然我很快就启动并运行了它,但在 IntelliJ IDEA 中调试时不再拾取重新编译类中的更改
我使用以下代码创建了小测试,并尝试执行这些步骤以使用热交换功能。 使用“调试”按钮运行程序 在渲染函数中创建一个断点,以暂停程序。 改变rectangle.width的值 编译程序 让 intelli
我在使用 Intellij IDEA Community Version 的 hotswap 功能时遇到了麻烦。我的是 v 14.1.4。 每次我启动调试并更改 java 代码后,我已经单击重建项目并
这里的教程:http://www.hotswapagent.org/quick-start 说要用: -XXaltjvm=dcevm -javaagent:PATH_TO_AGENT\hotswap-
我将 spring-boot-starter 用于打开静态套接字进行通信的大型服务器项目。因为每次代码更改后不必总是在 Intellij IDEA 中重新启动服务器(从而退出套接字连接),我正在尝试
我有一个在 Spring Tool Suite 中构建的应用程序,并且在前端也使用了 angular。我正在构建我的专家并在 Tomcat 中部署 war 。虽然 Spring 开发工具在从 STS
我的 HotSwap 运行配置只适用于 java 而不是 html。 我在 Tomcat 上运行一个 Wicket 应用程序,我从 mvn tomcat7:run 开始。 在我的运行器配置(运行器选项
我正在使用 Groovy 和 Google App Engine。我正在试用 Intellij,但我无法弄清楚如何让热插拔为 Groovy 类的更改工作。它在 Eclipse 中对我有用。是否需要做一
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我正在使用 IntelliJ IDEA 14 在 Tomcat7 中进行 war 部署(不是爆炸式 war )。我的网络应用程序由两场 war 组成: views.war(Struts 类,JSP)
我是一名优秀的程序员,十分优秀!