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


当前回答

是的!下面是设置方法。

运行配置

创建远程运行配置:

执行->编辑配置… 点击左上角的“+” 在最左边的窗格中选择“Remote”选项 选择一个名称(我将我的命名为“remote-debugging”) 点击“确定”保存:

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中会出现断点。

其他回答

我也使用Tomcat GUI应用程序(在我的情况下:C:\ Tomcat \bin\Tomcat9w.bin)。

Go to Java tab: Set your Java properties, for example: Java virtual machine C:\Program Files\Java\jre-10.0.2\bin\server\jvm.dll Java virtual machine C:\tomcat\bin\bootstrap.jar;C:\tomcat\bin\tomcat-juli.jar Java Options: -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 options: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED

在AndroidStudio或idea中

配置应用程序将被调试,打开编辑配置

添加“虚拟机选项”配置 “-agentlib: jdwp =运输= dt_socket, server = y,暂停= n,地址= 5005” 还记得“地址”

配置远程调试器 如果不存在,单击+添加

指定“端口”与步骤1中的“地址”相同

另外,不要忘记如果你想在调试模式下连接,你需要在应用JAVA_OPTS中添加“-Xdebug”标志。

是的!下面是设置方法。

运行配置

创建远程运行配置:

执行->编辑配置… 点击左上角的“+” 在最左边的窗格中选择“Remote”选项 选择一个名称(我将我的命名为“remote-debugging”) 点击“确定”保存:

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中会出现断点。

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

需要添加远程调试配置:Edit configuration -> remote。

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

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

然后,当您的应用程序启动时,您可以附加调试器。如果你想让你的应用程序等待调试器被连接,只需将挂起标志改为y (suspend=y)