Debugging 将IntelliJ IDEA调试器附加到正在运行的Java进程
是否可以将IntelliJ IDEA调试器附加到正在运行的Java进程?如果是,怎么做?这是可能的,但在启动应用程序时必须添加一些JVM标志 您必须添加远程调试配置:编辑配置->远程 然后,您将在显示的对话框窗口中找到必须添加到程序执行中的参数,如:Debugging 将IntelliJ IDEA调试器附加到正在运行的Java进程,debugging,intellij-idea,Debugging,Intellij Idea,是否可以将IntelliJ IDEA调试器附加到正在运行的Java进程?如果是,怎么做?这是可能的,但在启动应用程序时必须添加一些JVM标志 您必须添加远程调试配置:编辑配置->远程 然后,您将在显示的对话框窗口中找到必须添加到程序执行中的参数,如: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 然后,当应用程序启动时,可以附加调试器。如果希望应用程序等待调试器连接,只需将挂起标志更改为y(suspend=
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
然后,当应用程序启动时,可以附加调试器。如果希望应用程序等待调试器连接,只需将挂起标志更改为y(
suspend=y
)是!下面是您如何设置它的
运行配置
创建远程运行配置:
export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
但这取决于您如何运行应用程序。如果你不确定这三个选项中哪一个适用于你,从第一个选项开始,沿着列表往下看,直到找到一个合适的选项
您可以将suspend=n
更改为suspend=y
,以强制应用程序在与IntelliJ连接后再启动。如果要命中的断点发生在应用程序启动时,这将非常有用
调试
按正常方式启动应用程序,然后在IntelliJ中选择新配置并点击“调试”
IntelliJ将连接到JVM并启动远程调试
现在,您可以通过在需要的地方向代码中添加断点来调试应用程序。应用程序的输出仍然会出现在它以前出现过的任何地方,但您的断点将在IntelliJ中出现。此外,如果您希望在调试模式下连接,请不要忘记在应用程序JAVA_OPTS中添加“-Xdebug”标志。在AndroidStudio或idea中
-agentlib:jdwp=transport=dt_套接字,服务器=y,挂起=n,地址=5005
记住“地址”
我还使用了Tomcat GUI应用程序(在我的例子中:C:\Tomcat\bin\Tomcat9w.bin)
- 转到Java选项卡:
- 设置Java属性,例如: Java虚拟机 C:\ProgramFiles\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 --添加opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
当然可以。您需要创建“远程”运行/调试配置。此外,从14.0.2开始,这些命令行参数是只读的。您只能编辑其中的几个,这无助于解决此问题。你知道如何解决这个问题吗?答案在这里:请看,编辑下面的输入,然后更新上面的选项字符串(至少在13.1 CE中)。嗯,从14.0.2开始,这些命令行参数是只读的。您可以编辑其中的几个。你知道如何解决这个问题吗?还有,你通过设置这些选项来附加什么过程?第一个对我有用。其他人注意-我需要在-jar标志之前指定它。@Nuzzolilo,idea中显示的命令行参数仅用于显示目的,因此它们是只读的。它们不应该添加到idea,而是要调试的远程java应用程序。mac os el capitan上的Intellij idea 15.0.2中没有“远程”选项。我怎么才能得到那个选项?@user674669我不确定。可能社区版上没有
Remote
?我用的是付费版本。有人能用社区版确认吗?@CoryKlein你知道远程调试时如何从IntelliJ中获取System.out.println
的输出吗?@DonRhummy如果你知道怎么做,我很乐意将这些信息添加到这个答案中,但是AFAIK IntelliJ目前不支持将stdout和stderr从远程应用程序管道传输回IntelliJ。如果远程服务器只能通过ssh访问,我们如何指定密钥文件?