java XDebug使用(远程debug)

Java XDebug(远程debug模式)使用

xdebug简单来说就是远程的debug模式,通过开启JVM的debug模式来达到远程断点(debug)的效果,线上代码本地可以进行debug运行查看

服务器端

  • 不同版本jdk版本间 jvm 的启动方式不同
 	/**
 	 * jdk1.7之前启动:java -agentlib:jdwp=transport=dt_socket,address=9092,server=y,suspend=y -jar xxx.jar
 	 * jdk1.7之后:
 	 * 		java -agentlib:jdwp=transport=dt_socket,address=9092,server=y,suspend=y -jar xxx.jar
 	 * 		java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9092-jar xxx.jar
 	 * /
 // 服务端启动命令: 这里主要还是看当前服务器安装的jdk版本信息(以1.8实例)
 	/**
 	 * java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,address=9092,suspend=y -jar xxx.jar 
 	 * 也可以设置后台启动模式
 	 * nohup java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,address=9092,suspend=y -jar xxx.jar 1>/home/project/applogs/xxx-standout.log 2>&1 &
 	 * /
 	 
参数详解

-Xdebug:通知JVM工作在debug模式下;
-Xnoagent 禁用默认sun.tools.debug调试器。
-Djava.compiler=NONE 禁止 JIT 编译器的加载。
-Xrunjdwp:通知JVM使用(java debug wire protocol)来运行调试环境;加载JDWP的JPDA参考执行实例
transport:监听Socket端口连接方式(也可以dt_shmem共享内存方式,但限于windows机器,并且服务提供端和调试端只能位于同一台机);
server:server=y表示当前是调试服务端,=n表示当前是调试客户端
suspend:suspend=n表示启动时不中断,一般用于设置主动连接;suspend=y表示启动时就进入调试模式,一般用于被动连接
address=prot 表示远程debug所开放的端口号

用户端(Idea)

ps:这里出现 Connected to the target VM, address 服务器:8081’, transport: ‘socket’ 则代表启动成功

测试

注意:

1.服务端启动的时候,address=prot 这个端口号和程序端口,不是一样的。address这个端口号,必须要是没有被使用的端口。
2.服务端,不但要开放程序端口,而且要开放address端口。刚开始的时候,可以把防火墙关了练习。
3.客户端,调用的时候,调用的不是程序端口,而是address端口。

1 Like