Java远程断点调式 -Xdebug

前言:

  我们在开发的过程中,难免会遇到调用别人机器上的代码,或者测试服务器上的代码。再调用过程中,难免会用到断点调式的功能。但是运行的不是本地的代码怎么办呢?

现在我们就来了解下Java远程断点调用。

需要:

  本地必须有源码,才能进行远程断点。

一. 服务端启动

#jdk1.7版本之前的命令

  #java -agentlib:jdwp=transport=dt_socket,address=9092,server=y,suspend=y -jar xxx.jar

#1.7版本之后的命令

  #1) java -agentlib:jdwp=transport=dt_socket,address=9092,server=y,suspend=y -jar xxx.jar
  #2) java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9092-jar xxx.jar

我本地是jdk1.8,所以:

# nohup 末尾加&是后台运行 后边是日志输出路径

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表示启动时就进入调试模式,一般用于被动连接;

二. 客户端调用

用idea连接远程代码

1.

Java远程断点调式 -Xdebug

2.

 Java远程断点调式 -Xdebug

 3.

 Java远程断点调式 -Xdebug

 4.启动remote,当 console 窗口中打印出 “Connected to the target VM, address: 127.0.0.1:9092', transport: 'socket'”即表示链接成功

然后就可以访问页面,再本地代码打断点了

注意:

  1.服务端启动的时候,address=prot 这个端口号和程序端口,不是一样的。address这个端口号,必须要是没有在使用的。

  2.服务端,不但要开放程序端口,而且要开放address端口。刚开始的时候,可以把防火墙关了练习。

  3.客户端,调用的时候,调用的不是程序端口,而是address端口。