将IntelliJ IDEA调试器附加到正在运行的Java进程


237

是否可以将IntelliJ IDEA调试器附加到正在运行的Java进程?如果是,怎么办?


3
当然。您需要创建“远程”运行/调试配置。更多在这里
维克

2
嗯,这些命令行参数从14.0.2开始只读。您只能编辑其中的几个,这无助于解决此问题中的问题。任何想法如何解决这个问题?
nuzzolilo


Answers:


372

是! 设置方法如下。

运行配置

创建远程运行配置:

  1. 运行->编辑配置...
  2. 点击左上方的“ +”
  3. 在最左侧的窗格中选择“远程”选项
  4. 选择一个名称(我将其命名为“ remote-debugging”)
  5. 点击“确定”保存:

在此处输入图片说明

JVM选项

上面的配置提供了三个只读字段。这些选项告诉JVM在运行应用程序时打开端口5005进行远程调试。将适当的一项添加到要调试的应用程序的JVM选项中。您可能会这样做的一种方式是:

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

但这取决于您如何运行应用程序。如果不确定三者中哪一个适合您,请从第一个开始,然后向下浏览列表,直到找到适合的一个。

您可以更改suspend=nsuspend=y强制您的应用程序等待,直到与IntelliJ连接之后才能启动。如果要命中的断点发生在应用程序启动时,这将很有帮助。

除错

像往常一样启动应用程序,然后在IntelliJ中选择新配置,然后单击“调试”。

在此处输入图片说明

IntelliJ将连接到JVM并启动远程调试。

现在,您可以在需要的地方通过向代码添加断点来调试应用程序。该应用程序的输出将仍然出现在以前的任何位置,但是您的断点将出现在IntelliJ中。


2
在Mac os capitan上的Intellij IDEA 15.0.2中没有“远程”选项。如何获得该选项?
user674669 '16

@ user674669我不确定。Remote社区版上可能不可用?我正在使用付费版本。拥有社区版的人可以确认吗?
科里·克莱恩

@CoryKlein您知道System.out.println在远程调试时如何从IntelliJ中获取输出吗?
Don Rhummy

1
@DonRhummy如果您想办法,我很乐意将该信息添加到此答案中,但是AFAIK IntelliJ当前不支持将stdout和stderr从远程应用程序传递回IntelliJ。
科里·克莱恩

如果只能通过ssh访问远程服务器,我们如何指定密钥文件?
2016年

44

有可能,但是在启动应用程序时必须添加一些JVM标志。

您必须添加远程调试配置:编辑配置->远程。

然后,您将在显示的对话框窗口中找到必须添加到程序执行中的参数,例如:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

然后,在启动应用程序时,可以附加调试器。如果您希望应用程序等待调试器连接,只需将suspend标志更改为y(suspend=y


这让我感到困惑的是编辑下面的输入,这些再更新上面的选项字符串(在13.1 CE,至少。)
卡尔摹

7
嗯,这些命令行参数从14.0.2开始只读。您可以编辑其中的几个。任何想法如何解决这个问题?
nuzzolilo

1
另外,通过设置这些选项,您要附加到什么过程?
nuzzolilo

5
第一个为我工作。其他说明-我需要在-jar标志之前指定此名称。
2015年

2
@Nuzzolilo,在思想中显示的命令行参数仅用于显示目的,因此它们是只读的。不应将它们添加到构思中,而是要调试的远程Java应用程序。
Ganesh Krishnan

6

在AndroidStudio或想法中

  1. 配置应用程序将被调试,打开“编辑配置”

添加“ VM Options”配置 “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” 记住“地址”

在此处输入图片说明

  1. 如果没有退出,请配置Configure Debugger,单击+添加

指定与步骤1“地址”相同的“端口” 在此处输入图片说明


6

另外,如果要以调试模式连接,请不要忘记在应用程序JAVA_OPTS中添加“ -Xdebug”标志。


0

我也使用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 =全部取消命名

    --add-opens = java.base / java.io =全部取消命名

    --add-opens = java.rmi / sun.rmi.transport =全部取消命名

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.