Idea 远程调试 Java 代码
一、前言
线上/测试环境代码出了问题,总是要在本地复现,然后debug,这个过程是在是不太友好,而且线上的很多数据本地没有,经常耽误好久的时间来同步数据。
那么,远程调试线上/测试环境程序就有了用武之地,开发者在 IDE(如 IntelliJ IDEA、Eclipse)中配置远程调试,连接到此JVM。
二、开启远程调试
java程序开启远程调试只需要在加入一些特定的jvm参数,有两种方式。
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:9009 -jar your-app.jar
#Java 5+ 推荐使用更简单的格式:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:9009 -jar your-app.jar
各部分的含义:
1、-Xdebug
启用 JVM 的调试模式。
2、-Xrunjdwp
指定使用 JDWP(Java Debug Wire Protocol)协议,这是 Java 远程调试的标准协议。
3、transport=dt_socket
调试器与 JVM 之间通过socket通信(而不是共享内存等其他方式)。
4、server=y
JVM 作为调试的服务端(等待调试器连接)。如果是 n,则 JVM 会作为客户端主动连接调试器。
5、suspend=n
n 表示 JVM 不会在启动时暂停等待调试器连接,而是直接运行程序。
如果是 y,则 JVM 会暂停,直到调试器连接上后才继续执行(适用于调试启动问题)。
6、address=0.0.0.0:9009
调试服务监听的地址和端口:
0.0.0.0 表示监听所有网络接口(允许远程连接)。
9009 是默认的调试端口(可自定义,需确保防火墙允许)。
三、客户端远程调试
1)配置IDEA

2)运行Debug
注意事项
1.JVM 参数一致性
IDE 的端口必须与 JVM 启动参数的 address=端口 完全一致。
2.连接时机如果 JVM 参数设为 suspend=y,需先启动调试器再启动应用;若为 suspend=n,可随时连接。
3.安全建议
生产环境避免使用 address=0.0.0.0,建议通过 SSH 隧道转发端口:
ssh -L 9009:localhost:9009 user@server
然后 IDE 连接 127.0.0.1:9009。
验证调试是否生效
1.在代码中设置断点。
2.触发远程应用的相关操作,观察 IDE 是否暂停在断点处。
3.检查变量、调用栈等调试信息。
如果遇到连接失败,请检查:
服务器和 IDE 的网络连通性(telnet <IP> 9009)。
JVM 日志是否显示 Listening for transport dt_socket at address: 9009。
参考
更多推荐
所有评论(0)