原文出處:http://www.javaeye.com/topic/75128
最近使用WTP的Server功能很不爽,連tomcat服務(wù)器時(shí)java類(lèi)中的任何改動(dòng)都要重啟服務(wù)器,一怒之下就改用JPDA了,以下是一些總結(jié)。
什么是JPDA
Java Platform Debugger Architecture(JPDA:Java平臺(tái)調(diào)試架構(gòu)) 由Java虛擬機(jī)后端和調(diào)試平臺(tái)前端組成
1.Java虛擬機(jī)提供了Java調(diào)試的功能
2.調(diào)試平臺(tái)通過(guò)調(diào)試交互協(xié)議向Java虛擬機(jī)請(qǐng)求服務(wù)以對(duì)在虛擬機(jī)中運(yùn)行的程序進(jìn)行調(diào)試
JPDA的構(gòu)架
JPDA通過(guò)兩個(gè)接口和協(xié)議來(lái)完成如上的說(shuō)明,分別是JVMTI(Java虛擬機(jī)工具接口)、JDWP(Java調(diào)試連線(xiàn)協(xié)議)和JDI(Java調(diào)試接口)。
1.JVMTI定義了虛擬機(jī)應(yīng)該提供的調(diào)試服務(wù),包括調(diào)試信息(Information譬如棧信息)、調(diào)試行為(Action譬如客戶(hù)端設(shè)置一個(gè)斷點(diǎn))和通知(Notification譬如到達(dá)某個(gè)斷點(diǎn)時(shí)通知客戶(hù)端),該接口由虛擬機(jī)實(shí)現(xiàn)者提供實(shí)現(xiàn),并結(jié)合在虛擬機(jī)中
2.JDWP定義調(diào)試服務(wù)和調(diào)試器之間的通信,包括定義調(diào)試信息格式和調(diào)試請(qǐng)求機(jī)制
3.JDI在語(yǔ)言的高層次上定義了調(diào)試者可以使用的調(diào)試接口以能方便地與遠(yuǎn)程的調(diào)試服務(wù)進(jìn)行交互,Java語(yǔ)言實(shí)現(xiàn),調(diào)試器實(shí)現(xiàn)者可直接使用該接口訪(fǎng)問(wèn)虛擬機(jī)調(diào)試服務(wù)。
運(yùn)行方式
當(dāng)虛擬機(jī)的調(diào)試服務(wù)運(yùn)行時(shí),虛擬機(jī)作為調(diào)試的服務(wù)提供端,監(jiān)聽(tīng)一個(gè)連接,而調(diào)試器通過(guò)該連接與虛擬機(jī)進(jìn)行交互。目前,Windows平臺(tái)的JVM提供了兩種方式的連接:共享內(nèi)存和 Socket連接,共享內(nèi)存的服務(wù)提供端和調(diào)試端只能位于同一臺(tái)機(jī),而Socket連接則支持不同異機(jī)調(diào)試,即遠(yuǎn)程調(diào)試。
虛擬機(jī)參數(shù)設(shè)置
1.啟用調(diào)試服務(wù)
-Xdebug 啟用調(diào)試
-Xrunjdwp:<sub-options> 加載JVM的JPDA參考實(shí)現(xiàn)庫(kù)
2.Xrunjdwp子參數(shù)(sub-options)配置
Xrunjdwp子參數(shù)的配置格式如下
-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
幾個(gè)例子
-Xrunjdwp:transport=dt_socket,server=y,address=8000
在8000端口監(jiān)聽(tīng)Socket連接,掛起VM并且不加載運(yùn)行主函數(shù)直到調(diào)試請(qǐng)求到達(dá)
-Xrunjdwp:transport=dt_shmem,server=y,suspend=n
選擇一個(gè)可用的共享內(nèi)存(因?yàn)闆](méi)有指address)并監(jiān)聽(tīng)該內(nèi)存連接,同時(shí)加載運(yùn)行主函數(shù)
-Xrunjdwp:transport=dt_socket,address=myhost:8000
連接到myhost:8000提供的調(diào)試服務(wù)(server=n,以調(diào)試客戶(hù)端存在),掛起VM并且不加載運(yùn)行主函數(shù)
-Xrunjdwp:transport=dt_shmem,address=mysharedmemory
通過(guò)共享內(nèi)存的方式連接到調(diào)試服務(wù),掛起VM并且不加載運(yùn)行主函數(shù)
-Xrunjdwp:transport=dt_socket,server=y,address=8000,
onthrow=java.io.IOException,launch=/usr/local/bin/debugstub
等待java.io.IOException被拋出,然后掛起VM并監(jiān)聽(tīng)8000端口連接,在接到調(diào)試請(qǐng)求后以命令/usr/local/bin/debugstub dt_socket myhost:8000執(zhí)行
-Xrunjdwp:transport=dt_shmem,server=y,onuncaught=y,launch=d:\bin\debugstub.exe
等待一個(gè)RuntimeException被拋出,然后掛起VM并監(jiān)聽(tīng)一個(gè)可用的共享內(nèi)存,在接到調(diào)試請(qǐng)求后以命令d:\bin\debugstub.exe dt_shmem <address>執(zhí)行,<address>是可用的共享內(nèi)存
啟動(dòng)tomcat
-Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n
以上兩行是tomcat5.5.12的catalina.bat文件中的一句,可以看出tomcat在JPDA方式下是怎么啟動(dòng)的,啟動(dòng)tomcat要用catalina jpda start來(lái)啟動(dòng),不能用startup.bat啟動(dòng),啟動(dòng)前設(shè)置好JPDA_TRANSPORT,JPDA_ADDRESS就OK了
另有一篇文章http://www.blogcn.com/u2/38/21/ayufox/blog/36956440.html 介紹如何使用Eclipse構(gòu)建測(cè)試平臺(tái)
posted on 2007-06-18 16:20
steady 閱讀(818)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
Other