基本原理
Java 程序都是運行在 Java 虛擬機上的,我們要調(diào)試 Java 程序,事實上就需要向 Java 虛擬機請求當(dāng)前運行態(tài)的狀態(tài),并對虛擬機發(fā)出一定的指令,設(shè)置一些回調(diào)等等,那么 Java 的調(diào)試體系,就是虛擬機的一整套用于調(diào)試的工具和接口。
我們要調(diào)試一段Java程序,首先要知道運行該程序的Java虛擬機進程運行在什么機器上,然后就是要和這個進程建立連接,接下來才能進行調(diào)試。
比如說,我們要調(diào)試Android app,如果app是運行在真機上,那么我們就要用和手機上的虛擬機進行通信,才能進行調(diào)試。如果要調(diào)試的是Android的注解處理器或者Android Gradle的編譯腳本,那么這段代碼其實是運行在電腦上的,我們要知道運行這些腳本的程序運行在哪個進程,進而才能和這個進程建立連接。
Java調(diào)試體系-JPDA
Java調(diào)試體系主要分成三個部分,分別是調(diào)試者、被調(diào)試者,以及中間的通信協(xié)議,每一部分都有對應(yīng)的接口協(xié)議。下圖可以清晰的描述他們的關(guān)系:
從上到下分別調(diào)試者、通信協(xié)議、被調(diào)試者。
他們分別對應(yīng)的協(xié)議是 Java 虛擬機工具接口(JVMTI),Java 調(diào)試線協(xié)議(JDWP)以及 Java 調(diào)試接口(JDI)。