PDA consists of the following layered APIs:
- Java Debug Interface (JDI)
- This is a Java programming language interface providing support for remote debugging. This is the highest level interface in the architecture, and can be used to implement a remote debugger user interface without having to write any code that runs in the application JVM or understand the protocol between the debugger and the JVM. Most third party debuggers that support JPDA currently use this API.
- Java Debug Wire Protocol (JDWP)
- This API defines the format of the flows that run between the application JVM and the debugger user interface. This protocol is for use by debuggers that need to exploit the communication at a lower level than the JDI, and for JVM suppliers or more advanced debugger developers who need to support the standard connection architecture from the application JVM side.
- Java Virtual Machine Debug Interface (JVMDI)
- This is a low-level native interface within the JVM. It defines the services a Java virtual machine must provide for debugging, and can be used by advanced debugger developers who wish to implement debugger code that runs inside the application JVM ( to implement an alternative transport mechanism for debugger connection, for example).
When you start the JVM in debug mode, the JVMDI interface is activated and additional threads are started in the JVM. One of these threads handles communication with the remote debugger, the others monitor the application that is running in the JVM. You can issue commands in the remote debugger, for example to set break points or to examine the values of variables in the application. These commands are activated by the listener and event handler threads in the JVM.