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

时间:2014-01-14 12:53:18

标签: debugging intellij-idea

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

5 个答案:

答案 0 :(得分:332)

是的!以下是您设置的方式。

运行配置

创建远程运行配置:

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

    JVM选项

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

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

    但这取决于您运行应用程序的方式。如果您不确定这三者中哪一项适用于您,请从第一个开始,然后在列表中查找,直到找到有效的列表。

    您可以将suspend=n更改为suspend=y以强制您的应用程序等到您启动之前连接IntelliJ。如果要在应用程序启动时遇到要断点的断点,这将非常有用。

    调试

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

    enter image description here

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

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

答案 1 :(得分:43)

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

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

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

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

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

答案 2 :(得分:5)

另外,不要忘记你需要添加" -Xdebug"如果你想在调试模式下连接,请在app JAVA_OPTS中标记。

答案 3 :(得分:5)

AndroidStudio中的

或想法

  1. 配置应用程序将进行调试,打开编辑配置
  2. 添加“VM选项”配置 “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” 记得“地址”

    enter image description here

    1. 配置远程调试器 如果没有退出,请单击+添加
    2. 指定“端口”,与步骤1“地址”相同 enter image description here

答案 4 :(得分:0)

我还使用 Tomcat GUI应用(在我的情况下为C:\ tomcat \ bin \ Tomcat9w.bin)。

  • 转到 Java 标签:

    enter image description here

  • 设置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 = ALL-UNNAMED

         

    -add-opens = java.rmi / sun.rmi.transport =未命名