对于开发和实施人员来说,也许大家经常会碰到这样的对话:
实施工程师:系统有问题了,是哪里哪里(省略字若干+若干界面截图)
开发工程师:不可能,我这边还原了整个环境,包括数据库、代码和中间件……
实施工程师:这边是weblogic,你那边是?
开发工程师:我的是Tomcat,但Tomcat和weblogic的差异呢,不知道……
然后就没有结果,因为我们的个人电脑真的无法或者难以承受weblogic或者websphere之重。
怎么办呢,其实我们可以用远程调试的方法:
三步配置远程调试:
一、对于TOMCAT:
1、打开catalina.bat,并加入:
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5555
2、配置Eclipse,如下图(此时Port与上面的address一致,是5555):
3、如果Tocat已经起来(注意,可能在另外的机器上),那点击debug,即可进行与本地服务一样的调试过程。
二、对于Weblogic:
1、打开startWebLogic.cmd,并调整执行java命令的地方:
%JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server
调整为
@REM ORG : %JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server
@REM Surport Remote Debug :
set JAVA_DEBUG=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_Socket,address=4000,server=y,suspend=n
%JAVA_HOME%\bin\java %JAVA_VM% %JAVA_DEBUG% %MEM_ARGS% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server
2、其他配置类似Tomcat,如下:
3、同样,如果weblogic已经起来(注意,我上面的例子就是weblogic不在本机上,而在于另外的机器上),那点击debug,即可进行与本地服务一样的调试过程,如下:
大家也许会问:这样调试会不会影响客户使用?当然会影响,如果一旦hit了断点,则整个应用会被挂起。那怎么样才能尽可能的进行调试呢?方法还是有的:
1、如果是tomcat,重新复制一份tomcat,修改一下端口,然后起来后调试,此时整个环境都类似了,调试起来非常方便;
2、如果是weblogic,重新建立一个新的domain即可,互不干扰;
3、如果是websphere,呵呵,没试过,留给大家的作业。
原理?好奇的人还会问,其实就是jdwp(Java(tm) Debug Wire Protocol),有兴趣就google一下吧。