如何实现远程调试java代码

如题所述

1. 远程debug调试java代码

1.1 主动连接调试

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

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),

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

1.2 被动连接调试

首先需要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。

这样远程项目启动时就连接到本地,方便调试项目启动不了的问题。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答