【发布时间】:2014-02-02 13:02:24
【问题描述】:
是否可以将 IntelliJ IDEA 调试器附加到正在运行的 Java 进程?如果是,怎么做?
【问题讨论】:
-
当然。您需要创建一个“远程”运行/调试配置。更多here
-
嗯,从 14.0.2 开始,这些命令行参数是只读的。您只能编辑其中的几个,这无助于解决此问题中的问题。知道如何解决这个问题吗?
是否可以将 IntelliJ IDEA 调试器附加到正在运行的 Java 进程?如果是,怎么做?
【问题讨论】:
是的!以下是您的设置方式。
创建远程运行配置:
上面的配置提供了三个只读字段。这些选项告诉 JVM 在运行应用程序时打开端口 5005 以进行远程调试。将适当的选项添加到您正在调试的应用程序的 JVM 选项中。您可能会这样做的一种方法是:
export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
但这取决于您运行应用程序的方式。如果您不确定这三个中的哪一个适用于您,请从第一个开始,然后逐个列出,直到找到合适的。
您可以将 suspend=n 更改为 suspend=y 以强制您的应用程序等到您连接 IntelliJ 后再启动。如果您要命中的断点发生在应用程序启动时,这将很有帮助。
像往常一样启动您的应用程序,然后在 IntelliJ 中选择新配置并点击“调试”。
IntelliJ 将连接到 JVM 并启动远程调试。
您现在可以通过在需要的代码中添加断点来调试应用程序。应用程序的输出仍然会出现在之前的任何位置,但您的断点会在 IntelliJ 中命中。
【讨论】:
Remote 在社区版中不可用?我用的是付费版。有社区版的人可以确认一下吗?
System.out.println 的输出吗?
这是可能的,但您必须在启动应用程序时添加一些 JVM 标志。
您必须添加远程调试配置:编辑配置 -> 远程。
然后您会在显示的对话框窗口中找到必须添加到程序执行中的参数,例如:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
然后,当您的应用程序启动时,您可以附加调试器。如果您希望您的应用程序等待调试器连接,只需将挂起标志更改为 y (suspend=y)
【讨论】:
另外,如果您想在调试模式下连接,请不要忘记您需要在应用程序 JAVA_OPTS 中添加“-Xdebug”标志。
【讨论】:
我还使用 Tomcat GUI 应用程序(在我的例子中:C:\tomcat\bin\Tomcat9w.bin)。
转到Java标签:
设置您的 Java 属性,例如:
Java 虚拟机
C:\Program Files\Java\jre-10.0.2\bin\server\jvm.dll
Java 虚拟机
C:\tomcat\bin\bootstrap.jar;C:\tomcat\bin\tomcat-juli.jar
Java 选项:
-Dcatalina.home=C:\tomcat
-Dcatalina.base=C:\tomcat
-Djava.io.tmpdir=C:\tomcat\temp
-Djava.util.logging.config.file=C:\tomcat\conf\logging.properties
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
Java 9 选项:
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.io=ALL-UNNAMED
--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
【讨论】: