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

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=

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

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

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

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

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

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

是!下面是您如何设置它的

运行配置 创建远程运行配置:

  • 运行->编辑配置
  • 单击左上角的“+”
  • 在最左侧窗格中选择“远程”选项
  • 选择一个名称(我将我的名称命名为“远程调试”)
  • 单击“确定”保存:
  • JVM选项 上面的配置提供了三个只读字段。这些选项告诉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中出现。

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

    在AndroidStudio或idea中

  • 配置应用程序将被调试,打开编辑配置
  • 添加“VM选项”配置
    
    -agentlib:jdwp=transport=dt_套接字,服务器=y,挂起=n,地址=5005
    
    记住“地址”

  • 配置远程调试器 如果不存在,请单击+添加
  • 指定与步骤1“地址”中相同的“端口”

    我还使用了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访问,我们如何指定密钥文件?