JVMDI 定义了虚拟机需要实现的本地接口
JDWP 定义了JVM与调试客户端之间的通讯协议
调试客户端和JVM 既可以在同一台机器上,也可以远程调试。JDK 会包含一个默认的实现 jdwp.dll,JVM 允许灵活的使用其他协议代替 JDWP。SUN JDK 有两种方式传输通讯协议:Socket 和共享内存(后者仅仅针对 Windows),一般我们都采用 Socket 方式。
你可以用下面的参数,以调试模式启动JVM
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
-Xrunjdwp JVM 加载 jdwp.dll
transport=dt_socket 使用 Socket 传输
address 表示调试端口号
server=y 表示 JVM 作为服务器,建立 Socket
suspend=n 表示启动过程中,JVM 不会挂起去等待调试客户端连接
下图为 JPDA 的基本架构:
Components Debugger Interface
/ |-----------------------|
/ | VM |
debuggee ----( |-----------------------| <------- JVMDI - Java VM Debug Interface
\ | back-end |
\ |-----------------------|
/ |
comm channel -( | <--------------- JDWP - Java Debug Wire Protocol
\ |
|---------------------|
| front-end |
|---------------------| <------- JDI - Java Debug Interface
| UI |
|---------------------|
参见:http://java.sun.com/j2se/1.4.2/docs/guide/jpda/architecture.html
[1] [2] [3] [4] [5] [6] 下一页