標籤:
如摘要中所述,在聯調時經常性的需要將程式部署到測試機器上,此時要調試顯得很不方便。以前的做法都是在程式中列印資訊來進行追蹤,但是這種方法很有局限性,因為往往無法一次就定位到有問題的地方,需要不斷的修改程式列印的語句,不斷的重啟應用,這需要花費大量的時間和精力。因此,採用遠端偵錯會是一種好的解決方式。下面將會對java application和web application兩種入手進行說明。
一、Java Application的遠端偵錯
1、準備要調試的server端環境
首先準備一段小的代碼,並且在main方法中調用,我這邊寫了一段沒有任何意義的代碼,僅僅是為了示範需要,如下:
package com.zzq.test;/** * @author zhengzhq E-mail:[email protected] * @version 建立時間:2015-9-4 下午02:59:35 */public class RemoteDebug {public static void checkName(String name) {if ("name1".equals(name)) {System.out.println("this is name1");} else if ("name2".equals(name)) {System.out.println("this is name2");} else {System.out.println("unknow name " + name + "!!!");}}public static void main(String[] args) {if (args.length > 0) {checkName(args[0]);} else {checkName("unknow");}}}
如果運行中有傳遞值,將第一個值作為name傳遞給方法,很簡單的代碼。通過開發工具export-runnable jar,指定好執行的Main class->finish,jar包產生完成,我這邊匯出為debug.jar。此時在命令列執行java -jar debug.jar,出現如:
在java -jar中加入其他的啟動資訊,則程式會開啟遠端偵錯模式,並處於阻塞狀態,如下:
java -Xms700m -Xmx700m -Xdebug -server -Xrunjdwp:transport=dt_socket,server=y,address=12345 -jar debug.jar name1
其中address為指定的連接埠。
2、指定調試的client端環境
調試的代碼由於本地環境擁有,所以直接在IDE中右擊->debug As->Debug Configurations,彈出如下視窗,在Remote Application下可以配置要遠端偵錯的項目:
配置完成後,點擊彈出窗下的debug,則程式自動會與調試的server端串連上。如果server端沒啟動,則意味著連接埠沒監聽,會報Connection refused;否則程式根據設定的斷點進入執行。
二、Web Application
將應用打成war包放到tomcat/webapps目錄下,然後設定tomcat/conf/startup.sh,在前面加入如下的指令碼
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12345
然後啟動即可,啟動過程中會有列印一行關於遠端偵錯監聽:
用戶端的配置與Java Application一致,運行即可進行調試i
java 遠端偵錯(java application與web application)