Java远程调试

JDWP的全称是Java Debug Wire Protocol,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。其核心API已经包含在JDK中。

一. 普通Java项目的远程调试(无需运行在企业级容器中的项目)

1. 在运行Java项目的远程服务器上的运行脚本中加入以下设置参数:

java -Xms700m -Xmx700m -Xdebug -server -Xrunjdwp:transport=dt_socket,server=y,address=9527 com.imop.webt.gameserver.GameServer

java   -Xms700m -Xmx700m -Xdebug -server -Xrunjdwp:transport=dt_socket,server=y,address=9527 -jar com.imop.webt.gameserver.GameServer

红色部分参数为与远程调试相关的参数

开放9527端口

iptables -A INPUT -p tcp --dport 9527 -j ACCEPT

2. 在本地的eclipse中 Debug(小蜘蛛图标)>Debug Configuration...>Remote Java Application>New下创建一个远程调试的项目并设置相关参数

并在需要debug的地方打断点。

二. Web项目(或需要运行在企业级容器中的项目)
 
1. 在远程服务器的运行的Web容器的启动脚本中加入以下配置(以Resin为例子),将Java项目部署到容器中,启动容器服务器。
Resion——————————————————————————————————————————————————————
set JAVA_HOME=C:/Program Files/Java/jdk1.6.0_16
set RESIN_HOME=D:/resin-2.1.17
set PATH=%JAVA_HOME%/bin;%PATH%;%RESIN_HOME%/bin

httpd.exe -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9527

或者在resin.conf中设置

<jvm-arg>-Xdebug</jvm-arg>

<jvm-arg-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9527</jvm-arg>

红色部分为与远程调试相关的配置。

tomcat——————————————————————————————————————————————————————

a、Linux中配置tomcatcatalina.sh中添加如下
CATALINA_OPTS="-Xdebug  -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"(不要换行,要在同一行)

b、Window中修改 catalina,bat文件,添加:

Set  “CATALINA_OPTS=-Xdebug  -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

如图:


参数说明:

-Xdebug                              : 启用调试模式

-Xrunjdwp<sub-options>  : 加载JVMJPDA参考实现库

transport=dt_socket           :Socket连接,可选dt_shmem 通过共享内存的方式连接到调试服务器

address=8000                     :调试服务器监听的端口

server=y                             : 是否是服务器端,n为客户端

suspend=n                         : 启动过程是否加载暂停,y为启动时暂停,方便调试启动过程

 

2. 在本地的eclipse中添加相关远程调试设置参数(与前面的配置相同)

如果要在本地看到输入输出(read and system.out.println)的结果显示,按F5加入控制

原文地址:https://www.cnblogs.com/shz365/p/7575422.html