本文主要介绍idea本地调试远程服务器程序的方式。相信很多同行跟我一样,在最初接触公司项目的时候,遇到测试提出的缺陷,往往会在本地进行调试、替换jar包远程调试等方式,本地调试往往会导致数据和环境不一致的问题使得问题无法复现,替换jar包也回因为需要替换的模块可能涉及其它功能,产生冲突。接下来先简单说下本地远程调试服务器程序的应用场景及优势。
接下来就正式介绍如何使用idea远程调试测试服务器程序。主要分为两步:1.服务器程序以调试模式启动。2.本地idea配置调试模式并以debug方式启动。
要让Java程序在远程服务器上以调试模式运行,你需要在启动时指定JVM参数,以便打开远程调试端口。以下是一组常见的参数:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-application.jar
解释:
transport=dt_socket
:使用基于套接字的调试。server=y
:作为调试服务器运行。suspend=n
:指定JVM启动时不暂停,suspend=y
会使得JVM在调试器连接之前暂停。address=*:5005
:打开端口5005以监听远程调试连接,*
表示监听所有网络接口。Java虚拟机(JVM)参数可以通过多种方式设置,以便以调试模式运行Java应用程序。以下是根据不同方式设置JVM以启用远程调试的示例:
在命令行中直接添加JVM参数来启动应用程序。
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-application.jar
你可以设置一个环境变量,例如JAVA_OPTS
或_JAVA_OPTIONS
,并在启动应用程序时包含它。
export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
java $JAVA_OPTS -jar your-application.jar
在IDE中,比如IntelliJ IDEA或Eclipse,你可以在运行/调试配置中设置JVM参数。
对于IntelliJ IDEA:
打开Run
-> Edit Configurations...
在VM options
字段中输入调试参数:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
如果你使用Maven或Gradle,可以在其配置文件中设置JVM参数。
对于Maven,可以在pom.xml
文件中配置maven-surefire-plugin
插件:
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<configuration>
<argLine>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005argLine>
configuration>
plugin>
对于Gradle,可以在build.gradle
中设置:
test {
jvmArgs '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005'
}
如果你的应用程序运行在Docker容器中,你可以在Dockerfile
中设置环境变量,或者在启动容器时通过命令行参数设置。
在Dockerfile
中:
ENV JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
或者在启动容器时:
docker run -e "JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005" -p 5005:5005 -d your-image
打开Run菜单,选择Edit Configurations。点击左上角的**+(Add New Configuration)按钮,选择Remote**。
启动配置好的远程调试:
Shift+F9
。此时,IntelliJ IDEA将尝试连接到远程服务器上打开的调试端口。一旦连接成功,你就可以像调试本地程序一样设置断点、检查变量和执行步进操作。
1.请确保在所有这些示例中,远程调试端口(如5005
)未被防火墙或任何网络策略阻塞,并且你的安全设置允许你从IDE连接到远程服务器上的这个端口。
2.确保调试端口不对外暴露,避免安全风险。
3.远程调试可能会影响应用程序性能,不宜在高峰时段进行。
4.必须确保拥有足够权限在远程服务器上启动调试模式。
5.需要稳定的网络连接以保证调试会话不会中断。