Java Remote Debug(idea远程调试)

本文介绍了一种使用JetBrains IDEA进行远程调试的方法。适用于模块众多、体积庞大的Maven项目。通过在启动参数中加入特定的JVM选项,可以开启远程调试功能,并通过指定端口与IDEA连接。文中还详细解释了各个调试参数的作用。

Java Remote Debug(远程调试)

新接手的项目采用的是Maven作为编译管理工具,项目内容则是按子模块Module来划分。由于模块太多,且都比较大(基本上都能独立运行并负责处理一方面的业务),并采用Socket来进行模块之间的数据通信,结果就导致一个略显臃肿的系统产生了。最重要的是,不知道maven的pom.xml文件出了什么问题,Eclipse也一直无法成功加载部分重要模块(以致最后切换到JetBrain IDEA(Open Source)——这也算是一点收获),常用的调试方式也行不通了。过了好一段时间我才习惯,每次提交代码前都要小心翼翼地检查一遍。

昨天让同事帮我做CodeReview,讨论问题中,看着他演示一下Remote Debug。觉得很神奇,回来试了一下,又加了点资料,才发觉得我真的是Out了。以下内容是个简单的笔记,关于在JetBrain IDEA中使用Remote Debug的方式。

要想Debug,首先得需要在编译时打开debug选项,这样生成的class文件才能支持debug过程。其次,RemoteDebug过程是在两个不同的VM实例间进行了,这就得需要一个通信方式了。常用的是Socket了!因此设置中会涉及到一些端口设置的。

在启动程序时,将以下参数选项添加到自定义的命令行中,程序就会以支持RemoteDeubg的方式启动。

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=2345

例如:

JVM_OPTS="-server -Xss128k -XX:+UseParNewGC -XX:+HandlePromotionFailure -XX:+HeapDumpOnOutOfMemoryError"
DEBUG="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=2345"
JVM_OPTS="$JVM_OPTS $DEBUG"
$JAVA_HOME/bin/java $JVM_OPTS -cp $CP com.romebuild.Main

准备程序之后,再配置一下IDE,让它去访问远程的VM了。过程相当简单!

【Run】|【Edit Configuration】,选择【Add New Configuration】|【Remote】,便生成了一个RemoteDebug配置,其中的参数不用修改,但需要设置目标VM实例所在的主机与监听的端口。本例则为localhost:2345了。再选择与目标实例对应的模块代码就可以了。

点击调试按钮,IDEA就会连接到目标VM上去了,调试方法就不用多说了吧。下面来说明一下DEBUG选项参数的意思:

-XDebug 启用调试
-Xrunjdwp 加载JDWP的JPDA参考执行实例。
transport  用于在调试程序和 VM 使用的进程之间通讯。
dt_socket 套接字传输。
server=y/n VM是否需要作为调试服务器执行。
address=2345调试服务器监听的端口号。
suspend=y/n 是否在调试客户端建立连接之后启动 VM 。

关于suspend多说一句,如果设置为y,它会阻塞程序运行,直到有客户端连接到对应的监听端口(这里是9527),程序才真正开始执行。我们有时候会抱怨程序一闪而过,还没来得及在本地加载上代码程序就执行完了,这种情况就可以使用suspend参数。

还有一个细节是-jar参数不能写到-Xug参数前,像这样无法启用调试:
java -jar lib/Main.jar -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=y

转自:http://blog.youkuaiyun.com/studyvcmfc/article/details/7524996

在 IntelliJ IDEA 中配置 Java 应用程序的远程调试,主要依赖于 JDPA(Java Platform Debugger Architecture)技术,该技术允许将调试器连接到一个远程运行的 Java 进程,从而进行断点设置、变量查看、线程分析等调试操作[^3]。以下是详细的配置步骤: ### 1. 启动远程 Java 应用时启用调试模式 远程调试需要在启动 Java 应用程序时添加 JVM 参数以启用调试端口。通常使用的参数如下: ```bash java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar your-application.jar ``` - `transport=dt_socket`:表示使用套接字传输调试数据。 - `server=y`:表示 JVM 等待调试器连接。 - `suspend=n`:表示 JVM 启动时不暂停,直到调试器连接后才开始执行。 - `address=5005`:指定调试端口,可根据需要更改[^1]。 ### 2. 在 IntelliJ IDEA 中配置远程调试 1. 打开 IntelliJ IDEA,进入 `Run` 菜单,选择 `Edit Configurations...`。 2. 点击左上角的 `+` 号,选择 `Remote JVM Debug`。 3. 填写配置信息: - `Name`:配置名称,例如 `Remote Debug`。 - `Host`:远程服务器的 IP 地址。 - `Port`:与 Java 应用启动时指定的调试端口号一致(如 5005)。 - 其他选项可根据需要设置。 4. 点击 `Apply`,然后点击 `Debug` 启动调试会话。 成功连接后,IDEA 将显示调试器已连接,并可开始设置断点和调试代码[^2]。 ### 3. 调试操作 - 设置断点:在代码编辑器左侧点击设置断点。 - 查看变量:在调试窗口中查看当前上下文的变量值。 - 线程分析:查看当前运行的线程状态,进行单步执行、继续执行等操作。 ### 4. 注意事项 - 确保远程服务器的防火墙允许调试端口通信。 - 生产环境中启用远程调试需谨慎,建议在非高峰时段进行,避免影响性能。 - 调试连接建立后,应用程序的执行会受到调试器控制,需注意对业务的影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值