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

Mar*_*rco 220 debugging intellij-idea

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

Cor*_*ein 353

是! 这是你如何设置它.

运行配置

创建远程运行配置:

  1. 运行 - >编辑配置...
  2. 单击左上角的"+"
  3. 在最左侧窗格中选择"远程"选项
  4. 选择一个名字(我将其命名为"远程调试")
  5. 单击"确定"保存:

在此输入图像描述

JVM选项

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

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
Run Code Online (Sandbox Code Playgroud)

但这取决于您运行应用程序的方式.如果你不确定这三者中哪一个适用于你,请从第一个开始,然后沿着列表向下,直到找到有效的那个.

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

调试

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

在此输入图像描述

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

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

  • 我的Intellij IDEA 15.0.2在mac os el capitan上没有"远程"选项.我怎样才能获得该选项? (2认同)

Jak*_*ski 43

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

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

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

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Run Code Online (Sandbox Code Playgroud)

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

  • 嗯,这些命令行参数从14.0.2开始只读.您可以编辑其中几个.知道如何解决这个问题吗? (6认同)
  • 第一个为我工作.别人注意 - 我需要在-jar标志之前指定它. (4认同)
  • @Nuzzolilo,idea 中显示的命令行参数仅用于显示目的,因此它们是只读的。它们不应该添加到想法中,而是添加到您要调试的远程 Java 应用程序中。 (3认同)

Max*_*Max 5

另外,如果要在调试模式下进行连接,请不要忘记在应用程序JAVA_OPTS中添加"-Xdebug"标志.


Bil*_*ill 5

在AndroidStudio或想法

  1. 配置应用程序将进行调试,打开编辑配置

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

在此输入图像描述

  1. 如果没有退出,请配置远程调试器,单击+添加

指定"端口",与步骤1"地址"相同 在此输入图像描述