JPDA 架構研究17 - JDI概覽

引入:前端

前面用了不少篇幅來討論JVMTI和JDWP部分,如今終於來看最靠近用戶端部分了,JDI。後端


分析:eclipse

a. JDI的基礎知識
ide

和JVMTI和JDWP不同的是,JDI提供了一組接口,這些接口是純JAVA編寫的。他們主要是給開發環境IDE用的,雖然調試器的實現能夠直接利用JDWP或者JVMTI,可是多了這一層則能夠從用戶的代碼級別來定義要發送的請求和獲取的信息。工具



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

調試器將用戶的操做轉化爲調試命令,命令經過連接被髮送到前端運行目標程序的虛擬機上;而後,目標虛擬機根據接受的命令作出相應的操做,將調試的結果發回給後端的調試器;最後,調試器可視化數據信息反饋給用戶。spa


JDI接口定義在$JAVA_HOME/lib/tools.jar中,從宏觀上看,它分爲5個大包。debug

包名
描述
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的代碼級別來分析這些模塊。

相關文章
相關標籤/搜索