JPDA 架構研究17 - JDI概覽

JPDA 架構研究17 - JDI概覽

標籤:jdwp jpda jvmti

引入:

前面用了很多篇幅來討論JVMTI和JDWP部分,現在終於來看最靠近使用者端部分了,JDI。

分析:

a. JDI的基礎知識

和JVMTI和JDWP不一樣的是,JDI提供了一組介面,這些介面是純JAVA編寫的。他們主要是給開發環境IDE用的,雖然調試器的實現可以直接利用JDWP或者JVMTI,但是多了這一層則可以從使用者的代碼層級來定義要發送的請求和擷取的資訊。

本質上,Eclipse的調試器與目標VM之間的雙向通訊如下:

調試器將使用者的操作轉化為調試命令,命令通過連結被發送到前端運行目標程式的虛擬機器上;然後,目標虛擬機器根據接受的命令做出相應的操作,將調試的結果發回給後端的調試器;最後,調試器可視化資料資訊反饋給使用者。

JDI介面定義在$JAVA_HOME/lib/tools.jar中,從宏觀上看,它分為5個大包。

包名

描述

com.sun.jdi

這是JDI的核心包,它提供了鏡像機制將目標虛擬機器上的所有資料、類型、域、方法、事件、狀態和資源,以及調試器發向目標虛擬機器的事件請求等都映射成 Mirror 對象

com.sun.jdi.connect

該包用於定義JDI到目標虛擬機器的串連

com.sun.jdi.connect.spi

該包用於定義開發TransportService(也就是前面我在JDWP層討論很深的傳輸器服務)所需要的必要的類和介面。

com.sun.jdi.event

該包定義了JDI事件和事件處理

com.sun.jdi.request

該包用於發送JDI事件然後在一定條件下發送。

b.JDI的具體實現

以Eclipse為例:

org.eclipse.jdt.debug 是 JDI 的一個完整實現,而org.eclipse.jdt.debug.ui 是 Eclipse 調試工具介面的實現。從包名上看,我們大體上把JDI 分成三個部分:

(1)資料模組。它負責調試器(Debugger)和目標虛擬機器上(Target VM)的資料建模。

(2)連結模組。它建立調試器(Debugger)與目標虛擬機器(Target VM)的溝通渠道。

(3)事件請求與處理模組。它提供調試器(Debugger)與目標虛擬機器(VM)之間的互動方式。

我們會在接下來的幾篇文章中從Eclipse的代碼層級來分析這些模組。

本文出自 “平行線的凝聚” 部落格,請務必保留此出處http://supercharles888.blog.51cto.com/609344/1587958

JPDA 架構研究17 - JDI概覽

相关推荐

揭秘DEX:它到底是什么神奇药物?
365体育APP官网

揭秘DEX:它到底是什么神奇药物?

⌛ 08-18 👁️ 842
“福()()()” 的成语
365allsports

“福()()()” 的成语

⌛ 10-16 👁️ 9454
绝地反击
365bet中文

绝地反击

⌛ 12-06 👁️ 3069
大学绩点是怎么计算出来的?
365体育APP官网

大学绩点是怎么计算出来的?

⌛ 12-11 👁️ 4228
如何管理 iPhone 和 iPad 上的通知
365bet中文

如何管理 iPhone 和 iPad 上的通知

⌛ 07-05 👁️ 5184
科普向:从A站到Z站你知道几个?
365体育APP官网

科普向:从A站到Z站你知道几个?

⌛ 08-09 👁️ 3718
喜欢的人不喜欢我怎么办,我教你高情商逆转
《地下城与勇士dnf》DNF黄金梦首饰值得买吗? 性价比分析
彩虹六号:围攻武器大全 全枪械优缺点及实用性分析