JPDA 架构研究18 - JDI的Mirror机制

引入:java

上篇文章从总体上来看待JDI协议,这里结合Eclipse的实现代码来讨论下JDI的Mirror机制。app


分析:ide

镜像机制是将目标虚拟机上的全部数据、类型、域、方法、事件、状态和资源,以及调试器发向目标虚拟机的事件请求等都映射成 Mirror 对象。其思想和咱们常常说的O/R Mapping同样,其主要思想就是把2个异构的系统中的事物统一块儿来。this


Mirror接口是JDI规范中定义的主接口,它位于com.sun.jdi包中:调试

public abstract interface Mirror
{
  public abstract String toString();
  public abstract VirtualMachine virtualMachine();
}

这个接口只提供了2个方法,一个是返回该镜像的字符串描述,一个是获取某镜像的实例的虚拟机。对象


Mirror机制定义了一个庞大的接口hierarchy, com.sun.jdi包中定义的几乎全部接口都直接或者间接继承了Mirror接口,从而把庞大的Debug过程当中用到的任何元素,过程,事件都映射起来。继承

好比基本类型的值被映射为PrimitiveValue, 对象实例被映射为ObjectReference等。接口


在Eclipse中,它提供了MirrorImpl的镜像实现类,其中获取镜像虚拟机的代码是读取成员变量fVirtualMachineImpl字段,该字段在构造器中初始化:事件

public MirrorImpl(String description)
  {
    this.fDescription = description;
    this.fVirtualMachineImpl = ((VirtualMachineImpl)this);
    PrintWriter writer = ((VirtualMachineManagerImpl)
      Bootstrap.virtualMachineManager()).verbosePrintWriter();
    if (writer != null)
      this.fVerboseWriter = new VerboseWriter(writer);
  }


虚拟机类提供了许多方法来直接或间接地获取目标虚拟机上全部的数据和状态信息,也能够挂起、恢复、终止目标虚拟机。这样调试器就能够经过某个Mirror,而后间接得到对应虚拟机,而且发送相应指令来完成相应操做了。ip

相关文章
相关标签/搜索