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的地方打断点。
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中配置tomcat在catalina.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> : 加载JVM的JPDA参考实现库
transport=dt_socket :Socket连接,可选dt_shmem 通过共享内存的方式连接到调试服务器
address=8000 :调试服务器监听的端口
server=y : 是否是服务器端,n为客户端
suspend=n : 启动过程是否加载暂停,y为启动时暂停,方便调试启动过程
2. 在本地的eclipse中添加相关远程调试设置参数(与前面的配置相同)
如果要在本地看到输入输出(read and system.out.println)的结果显示,按F5加入控制