開發調試過程中,有些場景無法在本地完成,譬如調試微信開發相關功能。由於微信要求回調地址必須是認證過的域名,本地顯然無法滿足這個要求,所以遠程調試就可以派上用場。
Tomcat遠程調試的配置主要有兩種方式,一種基於JAVA_OPTS,另一種則是直接使用JPDA接口。
經典的OPTS配置如下:JAVA_OPTS="$JAVA_OPTS -server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787"
其中,-server指定server模式,transport模式爲socket通信,非阻塞,端口8787。
隨着大家對JVM的認識越來越深入,JPDA的方式逐漸替代了傳統的OPTS方式。
簡單說說JPDA。JPDA全稱是Java Platform Debugger Architecture,即java平臺調試體系,由三個相對獨立的模塊或者層次組成,這三個層次分別是JVMTI(Tool Interface),JDWP(調試協議)以及JDI(調試接口)。JVMTI是5.0之後推出,用來替代之前的JVMPI及JVMDI,三者關係示意圖如下。
JPDA方式遠程調試和OPTS的區別是,通過啓動參數(原生的支持)實現。
./catalina.sh jpda start
需要注意的是,JPDA的默認地址是“localhost:8000”, 需要將JPDA_ADDRESS進一步修改,在catalina.sh中,添加如下內容:
export JPDA_ADDRESS=8000
至此,我們就可以開始本地的服務器調試了。
以IDEA爲例,添加Remote應用:
示例中我們修改了默認端口從8000到9081,這個需要確認服務端防火牆已開啓,所以在聯調前,telnet 端口是否開通。
最後,遠程調試,需要確保本地代碼和服務器的版本一致,否則會出現代碼錯位的情況,讓調試效果大打折扣。