隨筆 - 170  文章 - 536  trackbacks - 0
          <2007年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          我參與的團隊

          隨筆分類(103)

          搜索

          •  

          積分與排名

          • 積分 - 413929
          • 排名 - 135

          最新評論

          閱讀排行榜

          原文出處:http://www.javaeye.com/topic/75128

          最近使用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構建測試平臺

          posted on 2007-06-18 16:20 steady 閱讀(816) 評論(0)  編輯  收藏 所屬分類: Other
          主站蜘蛛池模板: 嘉祥县| 许昌县| 吴川市| 黔西县| 浙江省| 栾城县| 大庆市| 海门市| 曲阳县| 崇文区| 柏乡县| 虞城县| 永春县| 固阳县| 乌兰县| 汝城县| 玉环县| 寿阳县| 布尔津县| 息烽县| 汤原县| 黄陵县| 罗源县| 西吉县| 武穴市| 师宗县| 秀山| 莱阳市| 海南省| 景泰县| 广昌县| 沂源县| 紫金县| 乐昌市| 西安市| 城口县| 西畴县| 四川省| 定南县| 南汇区| 额敏县|