對(duì)于開發(fā)和實(shí)施人員來(lái)說(shuō),也許大家經(jīng)常會(huì)碰到這樣的對(duì)話:
實(shí)施工程師:系統(tǒng)有問題了,是哪里哪里(省略字若干+若干界面截圖)
開發(fā)工程師:不可能,我這邊還原了整個(gè)環(huán)境,包括數(shù)據(jù)庫(kù)、代碼和中間件……
實(shí)施工程師:這邊是weblogic,你那邊是?
開發(fā)工程師:我的是Tomcat,但Tomcat和weblogic的差異呢,不知道……
然后就沒有結(jié)果,因?yàn)槲覀兊膫€(gè)人電腦真的無(wú)法或者難以承受weblogic或者websphere之重。
怎么辦呢,其實(shí)我們可以用遠(yuǎn)程調(diào)試的方法:
三步配置遠(yuǎn)程調(diào)試:
一、對(duì)于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,如下圖(此時(shí)Port與上面的address一致,是5555):
3、如果Tocat已經(jīng)起來(lái)(注意,可能在另外的機(jī)器上),那點(diǎn)擊debug,即可進(jìn)行與本地服務(wù)一樣的調(diào)試過(guò)程。
二、對(duì)于Weblogic:
1、打開startWebLogic.cmd,并調(diào)整執(zhí)行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
調(diào)整為
@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已經(jīng)起來(lái)(注意,我上面的例子就是weblogic不在本機(jī)上,而在于另外的機(jī)器上),那點(diǎn)擊debug,即可進(jìn)行與本地服務(wù)一樣的調(diào)試過(guò)程,如下:
大家也許會(huì)問:這樣調(diào)試會(huì)不會(huì)影響客戶使用?當(dāng)然會(huì)影響,如果一旦hit了斷點(diǎn),則整個(gè)應(yīng)用會(huì)被掛起。那怎么樣才能盡可能的進(jìn)行調(diào)試呢?方法還是有的:
1、如果是tomcat,重新復(fù)制一份tomcat,修改一下端口,然后起來(lái)后調(diào)試,此時(shí)整個(gè)環(huán)境都類似了,調(diào)試起來(lái)非常方便;
2、如果是weblogic,重新建立一個(gè)新的domain即可,互不干擾;
3、如果是websphere,呵呵,沒試過(guò),留給大家的作業(yè)。
原理?好奇的人還會(huì)問,其實(shí)就是jdwp(Java(tm) Debug Wire Protocol),有興趣就google一下吧。