最近使用WTP的Server功能很不爽,連tomcat伺服器時java類中的任何改動都要重啟伺服器,一怒之下就改用JPDA了,以下是一些總結。
什麼是JPDA
Java Platform Debugger Architecture(JPDA:Java平台調試架構) 由Java虛擬機器後端和調試平台前端組成
1.Java虛擬機器提供了Java調試的功能
2.調試平台通過調試互動協議向Java虛擬機器請求服務以對在虛擬機器中啟動並執行程式進行調試
JPDA的構架
JPDA通過兩個介面和協議來完成如上的說明,分別是JVMTI(Java虛擬機器工具介面)、JDWP(Java調試連線協議)和 JDI(Java調試介面)。
1.JVMTI定義了虛擬機器應該提供的調試服務,包括調試資訊(Information譬如棧資訊)、調試行為(Action譬如用戶端設定一個斷點)和通知(Notification譬如到達某個斷點時通知用戶端),該介面由虛擬機器實現者提供實現,並結合在虛擬機器中
2.JDWP定義調試服務和調試器之間的通訊,包括定義調試資訊格式和調試請求機制
3.JDI在語言的高層次上定義了調試者可以使用的調試介面以能方便地與遠端調試服務進行互動,Java語言實現,調試器實現者可直接使用該介面訪問虛擬機器調試服務。
運行方式
當虛擬機器的調試服務運行時,虛擬機器作為調試的服務提供端,監聽一個串連,而調試器通過該串連與虛擬機器進行互動。目前,Windows平台的 JVM提供了兩種方式的串連:共用記憶體和 Socket串連,共用記憶體的服務提供端和調試端只能位於同一台機,而Socket串連則支援不同異機調試,即遠端偵錯。
虛擬機器參數設定
1.啟用調試服務
-Xdebug 啟用調試
-Xrunjdwp:<sub-options> 載入JVM的JPDA參考實現庫
2.Xrunjdwp子參數(sub-options)配置
Xrunjdwp子參數的配置格式如下
-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
幾個例子
-Xrunjdwp:transport=dt_socket,server=y,address=8000
在8000連接埠監聽Socket串連,掛起VM並且不載入運行主函數直到調試請求到達
-Xrunjdwp:transport=dt_shmem,server=y,suspend=n
選擇一個可用的共用記憶體(因為沒有指address)並監聽該記憶體串連,同時載入運行主函數
-Xrunjdwp:transport=dt_socket,address=myhost:8000
串連到myhost:8000提供的調試服務(server=n,以調試用戶端存在),掛起VM並且不載入運行主函數
-Xrunjdwp:transport=dt_shmem,address=mysharedmemory
通過共用記憶體的方式串連到調試服務,掛起VM並且不載入運行主函數
-Xrunjdwp:transport=dt_socket,server=y,address=8000,
onthrow=java.io.IOException,launch=/usr/local/bin/debugstub
等待java.io.IOException被拋出,然後掛起VM並監聽8000連接埠串連,在接到調試請求後以命令/usr/local /bin/debugstub dt_socket myhost:8000執行
-Xrunjdwp:transport=dt_shmem,server=y,onuncaught=y,launch=d:/bin/debugstub.exe
等待一個RuntimeException被拋出,然後掛起VM並監聽一個可用的共用記憶體,在接到調試請求後以命令d:/bin /debugstub.exe dt_shmem <address>執行,<address>是可用的共用記憶體
啟動tomcat
-Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n
以上兩行是tomcat5.5.12的catalina.bat檔案中的一句,可以看出tomcat在JPDA方式下是怎麼啟動的,啟動tomcat要用 catalina jpda start來啟動,不能用startup.bat啟動,啟動前設定好JPDA_TRANSPORT,JPDA_ADDRESS就OK了
另有一篇文章http://www.blogcn.com/u2/38/21/ayufox/blog/36956440.html 介紹如何使用Eclipse構建測試平台
本文出處:http://www.javaeye.com/topic/75128