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端口。