通过Java的JPDA远程调试功能将本地源码与远程部署的应用连接起来实现调试,其中程序源码与服务器上发布的编译代码版本要保持一致,保证调试定位准确。调试的过程中,部署在应用服务器上的应用处于DEBUGE模式。
JPDA为Java平台上的调试器定义了一个标准的体系结构。默认情况下,JVM并没有启用JPDA。需要在启动JVM的命令行加载以下参数:-Xdebug -Xrunjdwp:transport=dt_socket, address=8000,server=y,suspend=y。
-Xdebug 启用调试特性 -Xrunjdwp 启用JDWP实现,它包含若干子选项: transport=dt_socket JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。 address=8000 JVM在8000端口上监听请求。 server=y y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。 suspend=y y表示启动的JVM会暂停等待,直到调试器连接上。suspend=y这个选项很重要。如果 你想从Tomcat启动的一开始就进行调试,那么就必须设置suspend=y。
打开apache-tomcat\bin目录将在启动文件中设置CATALINA_OPTS参数
1) Windows系统在startup.bat开始处中增加如下内容:
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
2) Linxu系统在startup.sh开始处中增加如下内容:
declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
ps:linux打开端口命令的使用方法。 nc -lp 8000 &(打开8000端口)。查看是否打开8000端口netstat -an | grep 8000
1·复制startup.bat 为startup_JPDA.bat并做如下配置:
set JPDA_TRANSPORT=dt_socket --连接方式
set JPDA_ADDRESS=8000 --监听端口
set JPDA_SUSPEND=y --是否挂起
call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%
注意将call "%EXECUTABLE%" start %CMD_LINE_ARGS% 换成了call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%。如下图所示:
如果配置挂起参数suspend=y(配置方式一)或JPDA_SUSPEND=y(配置方式二),JVM会使用socket方式,打开8000端口并挂起,等待客户端(Eclipse 远程Debug模式)接入,主要用于应用程序启动过程中的调试。如图:
1)打开Eclipse,导入项目源码(与被调试的代码一致)
2)打开Eclipse工具栏上Run -->Debug Configuration
3)选中左侧Remote Java Applilcation右键New—打开debug配置页面
4)设置参数
Project: 选择被调试的项目
Connection Type: 使用SocketAttach
Host:tomcat服务器所在IP地址
Port:8000(前面配置的监听端口)
5)设置完成后,记得点击Apply按钮,然后点击下方的Debug按钮,eclipse便可以已Debug模式调试远程tomcat上发布的代码了。
1·http://blog.csdn.net/jarfield/article/details/5250915
其中有关于如何远程调试JVM,JPDA简介