转:http://www.cnblogs.com/XuYankang/p/jpda.html
原理篇
核心是JPDA(Java Platform Debugger Architecture)框架。IBM有非常详细的介绍:
https://www.ibm.com/developerworks/cn/java/j-lo-jpda1/
https://www.ibm.com/developerworks/cn/java/j-lo-jpda2/
https://www.ibm.com/developerworks/cn/java/j-lo-jpda3/
https://www.ibm.com/developerworks/cn/java/j-lo-jpda4/
关键摘抄如下:
- JPDA是JVM的调试标准,任何JDK都必须实现。
- 调试Java程序,本质是向JVM请求当前状态。这需要对JVM发送一定指令,设置一定回调。
- JPDA的三个层次:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP)以及 Java 调试接口(JDI)。它们之间的角色图:
- JVMTI(Java Virtual Machine Tool Interface):通向JVM的native的接口,处于体系最底层。所有的调试功能都需要该接口提供。是debug和profiler的接口,是线程分析、监听和代码覆盖率检查的基础。会有个紧耦合的Agent来实现JVMTI。该Agent的加载时间是出于JVM初始化早期或者运行时加载(对应于上文中的suspend参数)。
- JDWP(Java Debug Wire Protocol):交互的通讯协议。定义了交互中的命令、回应数据和错误代码。不包含传输层具体实现。主要分为握手和应答两个阶段。
- JDI(Java Debug Interface):对JDWP进行解析,为JDWP提供队列、缓存等服务。分为数据模块,将虚拟机上的所有数据、状态映射为Java的数据对象;链接模块,调试器向虚拟机发起链接,以获得各种状态,分为主动和被动形式。事件请求和处理模块。
- 由于JVM神一般的存在,使得Java的运行是先天可控的,因此其调试程序的开发,也远容易与C++。
- 类似工具:Apache harmony