远程调试分为主动连接调试,和被动连接调试。

主动连接调试:服务端配置监控端口,本地IDE连接远程监听端口进行调试,一般调试问题用这种方式。

被动连接调试:本地IDE监听某端口,等待远程连接本地端口。一般用于远程服务启动不了,启动时连接到本地调试分析。

主动连接调试

首先需要远程服务配置启动脚本:

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
如果是启动jar包,指令:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar test.jar

说明:

-Xdebug是通知JVM工作在DEBUG模式下,

-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境。

transport是监听Socket端口连接方式(也可以dt_shmem共享内存方式,但限于windows机器,并且服务提供端和调试端只能位于同一台机)。

server=y表示当前是调试服务端,=n表示当前是调试客户端。

suspend=n表示启动时不中断(如果启动时中断,一般用于调试启动不了的问题)。address=8000表示本地监听8000端口。

远程服务(tomcat/jboss)启动成功后,本地Eclipse对需要调试的地方打上断点,然后项目右键启动远程调试:Debug as->Debug Configurations->Remote Java Application。Host为远程主机IP,Port为远程监听调试端口,Connection Type为:Standard(Socket Attach),如

java取消jre java jdwp如何关闭_远程服务

点击Debug,然后打断点,远程服务运行到断点处本地就会中断,然后进行调试。

【F5】:跟踪到方法中,当程序执行到某方法时,可以按【F5】键跟踪到方法中。

【F6】:单步执行程序。

【F7】:执行完方法,返回到调用此方法的后一条语句。

【F8】:继续执行,到下一个断点或程序结束。

【F11】:调试最后一次执行的程序。

被动连接调试

首先需要Eclipse配置监听,如主动连接调试的Eclipse配置图片,Connection Type选择:Standard(Socket Listen),配置本地监听端口,比如默认8000。点击Debug开始等待远程连接调试。

然后配置远程服务启动脚本:

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y"
如果是调试jar包,指令:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y -jar remoting-debug.jar

参数含义和主动连接调试一样,只是这里suspend=y表示启动时就中断,需要连接本地IDE调试启动。address=ip:port,ip需要修改为本地的对外IP。

这样远程项目启动时就连接到本地,方便调试项目启动不了的问题。