eclipse中tomcat的源碼調(diào)試整理版_第1頁(yè)
已閱讀1頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Eclipse 中 Tomcat 的源碼調(diào)試整理版1、介紹為了研究 Tomcat 源碼,我們通常需要通過(guò)調(diào)試(Debug)這種方式來(lái)一步步查看它的處理流程。對(duì)于代碼的調(diào)試類(lèi)型,有本地調(diào)試為遠(yuǎn)程調(diào)試兩種。本地調(diào)試指的是在 Eclipse 環(huán)境中通過(guò) Tomcat插件的方式來(lái)啟動(dòng) Tomcat 進(jìn)程,這種方式能調(diào)試大部分源碼,但對(duì)某些組件比如 juli 日志無(wú)能為力;遠(yuǎn)程調(diào)試指通過(guò)腳本啟動(dòng) Tomcat 進(jìn)程后,在 Eclipse 中使用“

2、Remote Java Application”連接上Tomcat 進(jìn)程,從而進(jìn)行源碼跟蹤的調(diào)試方式。遠(yuǎn)程調(diào)試優(yōu)于本地調(diào)試。2、腳本中的設(shè)置為了進(jìn)行遠(yuǎn)程調(diào)試,需要在腳本 catalina.bat 中添加 JVM 參數(shù),建議在腳本文件起始注釋完后的第一行進(jìn)行設(shè)置,如下所示:rem $Id: catalina.bat 1146097 2011-07-13 15:25:05Z markt $rem --------------------

3、-------------------------------------------------------set “CATALINA_OPTS= -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 “如果是非 windows 環(huán)境,則需要在 catalina.sh 腳本中添加,如:#

4、$Id: catalina.sh 1476739 2013-04-28 09:13:33Z jfclere $# -----------------------------------------------------------------------------CATALINA_OPTS=“-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,se

5、rver=y,suspend=y,address=8000 “各參數(shù)介紹如下:參數(shù) 描述-Xdebug 啟用調(diào)試特性,必須的。-Xnoagent The switch disables the old mechanism of communication between a debugger and a debugee. The mechanism was used mainly at times of JDK 1.1.x. It us

6、ed packages “sun.tools.debug“ and “sun.tools.agent“. JDK 1.4.x no longer contains the packages (i.e. it does not support the old mechanism) but it still accepts the switch.舊的通訊機(jī)制,1.4 以后的版本已經(jīng)不用了,配置了該選項(xiàng)不會(huì)報(bào)錯(cuò)但已無(wú)意義。4、附錄4.1、JP

7、DA 介紹JavaTM Platform Debugger Architecture ,簡(jiǎn)稱(chēng) JPDA。JPDA 為 Java 平臺(tái)上的調(diào)試器定義了一個(gè)標(biāo)準(zhǔn)的體系結(jié)構(gòu)。該體系結(jié)構(gòu)包括 3 個(gè)主要組成部分:JVM TI、JDI 和 JDWP。JVM TI 的全稱(chēng)是 Java Virtual Machine Tool Interface,它定義了 JVM 為了支持調(diào)試而必須提供的功能及相應(yīng)的訪(fǎng)問(wèn)接口。這些訪(fǎng)問(wèn)接口是以本地語(yǔ)言的形式提供的,由

8、 JVM(比如 Sun 公司的HotSpot VM)負(fù)責(zé)實(shí)現(xiàn)。不過(guò),JVM TI 只是 JVM 提供的一系列函數(shù),調(diào)試器(特別是遠(yuǎn)程的調(diào)試器)如何調(diào)用呢?其實(shí)啊,JVM TI 的直接客戶(hù)端并不是調(diào)試器,而是一個(gè)稱(chēng)為“JPDA back-end”的東東。這個(gè)東東應(yīng)該是屬于 JVM 的一部分,在 SUN JRE 的 bin 目錄下可以找到 jdwp.dll(jdwp.so)的庫(kù)文件,這就是 JPDA back-end 的實(shí)現(xiàn)。按我理解,J

9、PDA back-end 提供了各種訪(fǎng)問(wèn)方式(共享內(nèi)存,Socket) ,通過(guò)這些方式接收調(diào)試器的請(qǐng)求,然后調(diào)用 JVM TI 接口。JDI 的全稱(chēng)是 Java Debug Interface,它定義了訪(fǎng)問(wèn) JVM TI 接口的高層 API,以純 Java 語(yǔ)言提供,由 JDK 實(shí)現(xiàn)(在 Sun JDK 的 tools.jar 可以找到) 。調(diào)試器直接使用 JDI 來(lái)實(shí)現(xiàn)調(diào)試的功能。與JPDA back-end 相對(duì)應(yīng),JDI 實(shí)現(xiàn)

10、的角色就是 JPDA front-end。JDWP 的全稱(chēng)是 Java Debug Wire Protocol,它定義了 JPDA front-end 和 JPDA back-end 之間通訊信息的二進(jìn)制格式。這里的通訊信息主要包括兩種:調(diào)試器發(fā)送給 JVM 的請(qǐng)求信息和 JVM 發(fā)送給調(diào)試器的調(diào)試信息。4.2、-Djava.compiler=NONE本設(shè)置禁止使用 JIT 轉(zhuǎn)義器,加快 debug 的速度。jvm 在執(zhí)行 class

11、文件時(shí),會(huì)將 java 字節(jié)碼轉(zhuǎn)換成本地機(jī)器碼,有兩種利器:JIT 和轉(zhuǎn)義器(interpreter) 。? 轉(zhuǎn)義器(interpreter):每次執(zhí)行 class 文件,jvm 都會(huì)將字節(jié)碼轉(zhuǎn)換成微指令,然后按照順序依次執(zhí)行,有時(shí)一個(gè) java 指令會(huì)被轉(zhuǎn)義成十幾個(gè)微指令。因此執(zhí)行效率非常低。? JIT:針對(duì) interpreter 的瓶頸,JIT 技術(shù)在第一次執(zhí)行 class 文件時(shí),對(duì)其進(jìn)行一次編譯,會(huì)被精簡(jiǎn)成原生態(tài)指令碼。經(jīng)過(guò)一

12、次編譯后,下次再執(zhí)行相同的 class 時(shí),就不需要編譯了。因此,對(duì)頻繁執(zhí)行的 class 使用 JIT 技術(shù)進(jìn)行轉(zhuǎn)義,整體執(zhí)行效率會(huì)非常高。由于第一次執(zhí)行時(shí),要進(jìn)行徹底轉(zhuǎn)義,因此會(huì)非常耗時(shí)。因此,interpreter 和 JIT 各有優(yōu)缺點(diǎn):? interpreter:針對(duì)執(zhí)行次數(shù)極少的 class 文件,interpreter 性能更好。? JIT:對(duì)于頻繁執(zhí)行的 class 文件,JIT 技術(shù)更優(yōu)。回到 debug 模式下為什么

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論