模块  jdk.jdi
软件包  com.sun.jdi

Interface VirtualMachine

  • All Superinterfaces:
    Mirror
    All Known Subinterfaces:
    PathSearchingVirtualMachine

    public interface VirtualMachine
    extends Mirror
    一个针对调试的虚拟机。 更确切地说, mirror表示目标VM的复合状态。 所有其他镜像都与此接口的实例相关联。 可以通过此接口的实例直接或间接访问所有其他镜像。 此接口直接支持访问全局VM属性和控制VM执行。

    此接口的实例由Connector的实例创建。 例如, AttachingConnector附加到目标VM并返回其虚拟机镜像。 连接器通常通过调用VirtualMachineManager的VirtualMachineManager.createVirtualMachine(Connection) createVirtualMachine(连接)方法来创建VirtualMachine。

    请注意,在收到VMStartEvent之后,启动连接器启动的目标VM无法保证稳定。

    上的任何方法VirtualMachine这需要VirtualMachine作为参数可能抛出VMDisconnectedException如果目标VM断开且VMDisconnectEvent从所读出的已被或可EventQueue

    如果目标VM内存VirtualMachine ,则VirtualMachine上的任何方法(如果参数为VirtualMachine)可能会抛出VMOutOfMemoryException

    从以下版本开始:
    1.3
    • 字段详细信息

      • TRACE_NONE

        static final int TRACE_NONE
        所有跟踪都被禁用。
        另请参见:
        常数字段值
      • TRACE_SENDS

        static final int TRACE_SENDS
        对发送到目标VM的JDWP数据包启用跟踪。
        另请参见:
        常数字段值
      • TRACE_RECEIVES

        static final int TRACE_RECEIVES
        对从目标VM接收的JDWP数据包启用跟踪。
        另请参见:
        常数字段值
      • TRACE_EVENTS

        static final int TRACE_EVENTS
        跟踪已启用内部事件处理。
        另请参见:
        常数字段值
      • TRACE_REFTYPES

        static final int TRACE_REFTYPES
        跟踪启用了引用类型的内部管理。
        另请参见:
        常数字段值
      • TRACE_OBJREFS

        static final int TRACE_OBJREFS
        跟踪启用了对象引用的内部管理。
        另请参见:
        常数字段值
      • TRACE_ALL

        static final int TRACE_ALL
        所有跟踪都已启用。
        另请参见:
        常数字段值
    • 方法详细信息

      • allModules

        default List<ModuleReference> allModules()
        返回所有模块。 对于目标VM中的每个模块, ModuleReference将放置在返回的列表中。

        并非所有目标虚拟机都支持此操作。 使用canGetModuleInfo()确定是否支持该操作。

        实现要求:
        默认实现抛出 UnsupportedOperationException
        结果
        ModuleReference对象的列表,每个对象镜像目标VM中的模块。
        异常
        UnsupportedOperationException - 如果目标虚拟机不支持此操作。
        从以下版本开始:
        9
      • classesByName

        List<ReferenceType> classesByName​(String className)
        返回与给定名称匹配的已加载引用类型。 名称必须是完全限定的(例如,java.lang.String)。 对于使用给定名称找到的每个类或接口,返回的列表将包含ReferenceType 搜索仅限于加载的类; 没有尝试加载给定名称的类。

        返回的列表将包括至少加载到准备点的引用类型和未定义准备的类型(如数组)。

        参数
        className - 要搜索的类/接口名称
        结果
        一个ReferenceType对象的列表,每个对象镜像一个具有给定名称的目标VM中的类型。
      • allClasses

        List<ReferenceType> allClasses()
        返回所有加载的类型。 对于目标VM中的每个加载类型, ReferenceType将放置在返回的列表中。 该列表将包括镜像类,接口和数组类型的ReferenceTypes。

        返回的列表将包括至少加载到准备点的引用类型和未定义准备的类型(如数组)。

        结果
        ReferenceType对象的列表,每个对象镜像目标VM中的加载类型。
      • redefineClasses

        void redefineClasses​(Map<? extends ReferenceType,​byte[]> classToBytes)
        根据提供的定义重新定义给出的所有类。 重新定义的类中的方法称为“等效”(对于方法的旧版本)if
        • 它们的字节码是相同的,除了对常量池的指示,和
        • 引用的常量是相等的。
        否则,新方法称为“非等效”。 如果重新定义的方法具有活动堆栈帧,则这些活动帧将继续运行该方法的先前版本的字节码。 如果这种方法的新版本是非等效的,则来自这些活动帧之一的方法称为“过时”,并且当在其中一个方法上调用时, Method.isObsolete()将返回true。 如果需要重置这样的帧,请使用ThreadReference.popFrames(StackFrame)从堆栈中弹出旧的过时方法执行。 重新定义的方法的新调用将始终调用新版本。

        除了在常规JVM语义下会发生的情况之外,此函数不会导致任何初始化。 换句话说,重新定义类不会导致其初始化器运行。 预先存在的静态变量的值将保持与调用之前一样。 但是,完全未初始化的(新)静态变量将被赋予其默认值。

        如果重新定义的类具有实例,那么所有这些实例将在调用完成时具有由重新定义的类定义的字段。 预先存在的字段将保留其先前的值。 任何新字段都将具有其默认值; 没有运行实例初始化程序或构造函数。

        线程不需要暂停。

        此功能不会生成任何事件。

        重新定义的类中的所有断点都将被删除。

        并非所有目标虚拟机都支持此操作。 使用canRedefineClasses()确定是否支持该操作。 使用canAddMethod()确定重定义是否可以添加方法。 使用canUnrestrictedlyRedefineClasses()确定重定义是否可以更改模式,删除方法,更改类层次结构等。

        参数
        classToBytes - 从ReferenceType到字节数组的映射。 字节表示新的类定义,并且采用Java虚拟机类文件格式。
        异常
        UnsupportedOperationException - 如果目标虚拟机不支持此操作。
        • 如果canRedefineClasses()为false,则此方法的任何调用都将抛出此异常。
        • 如果canAddMethod()为false,则尝试添加方法将抛出此异常。
        • 如果canUnrestrictedlyRedefineClasses()为false,则尝试以下任何操作都将引发此异常
          • 更改架构(字段)
          • 更改层次结构(超类,接口)
          • 删除方法
          • 改变类修饰符
          • 改变方法修饰语
          • 更改NestHostNestMembers类属性
        NoClassDefFoundError - 如果字节与引用类型不对应(名称不匹配)。
        VerifyError - 如果“验证者”检测到类虽然格式良好,但包含内部不一致或安全问题。
        ClassFormatError - 如果字节不表示有效类。
        ClassCircularityError - 如果在初始化类时检测到圆形度。
        UnsupportedClassVersionError - 如果VM不支持主要和次要版本号(以字节为单位)。
        VMCannotBeModifiedException - 如果VirtualMachine是只读的 - 请参阅 canBeModified()
        从以下版本开始:
        1.4
        另请参见:
        Method.isObsolete()ThreadReference.popFrames(com.sun.jdi.StackFrame)canRedefineClasses()canAddMethod()canUnrestrictedlyRedefineClasses()
      • allThreads

        List<ThreadReference> allThreads()
        返回当前正在运行的线程的列表。 对于目标VM中的每个正在运行的线程,将镜像它的ThreadReference放在列表中。 返回的列表包含通过java.lang.Thread创建的线程,通过JNI连接到目标VM的所有本机线程,以及目标VM创建的系统线程。 尚未启动的线程对象(请参阅Thread.start() )和已完成执行的线程对象未包含在返回的列表中。
        结果
        一个ThreadReference对象的列表,一个对应于镜像VM中的每个正在运行的线程。
      • topLevelThreadGroups

        List<ThreadGroupReference> topLevelThreadGroups()
        返回没有父级的每个线程组。 对于每个顶级线程组, ThreadGroupReference放置在返回的列表中。

        此命令可用作构建现有线程组的树(或树)的第一步。

        结果
        一个ThreadGroupReference对象的列表,每个顶级线程组一个。
      • mirrorOf

        BooleanValue mirrorOf​(boolean value)
        为给定值创建BooleanValue 此值可用于设置和比较从此虚拟机中的变量或字段检索的值。
        参数
        value - 要为其创建值的布尔值
        结果
        给定布尔值的BooleanValue
      • mirrorOf

        ByteValue mirrorOf​(byte value)
        为给定值创建ByteValue 此值可用于设置和比较从此虚拟机中的变量或字段检索的值。
        参数
        value - 要为其创建值的字节
        结果
        给定字节的ByteValue
      • mirrorOf

        CharValue mirrorOf​(char value)
        为给定值创建CharValue 此值可用于设置和比较从此虚拟机中的变量或字段检索的值。
        参数
        value - 要为其创建值的char
        结果
        给定char的CharValue
      • mirrorOf

        ShortValue mirrorOf​(short value)
        为给定值创建ShortValue 此值可用于设置和比较从此虚拟机中的变量或字段检索的值。
        参数
        value - 创建值的缩写
        结果
        给定的短期ShortValue
      • mirrorOf

        IntegerValue mirrorOf​(int value)
        为给定值创建IntegerValue 此值可用于设置和比较从此虚拟机中的变量或字段检索的值。
        参数
        value - 要为其创建值的int
        结果
        给定int的IntegerValue
      • mirrorOf

        LongValue mirrorOf​(long value)
        为给定值创建LongValue 此值可用于设置和比较从此虚拟机中的变量或字段检索的值。
        参数
        value - 创建值的long
        结果
        给定长的LongValue
      • mirrorOf

        FloatValue mirrorOf​(float value)
        为给定值创建FloatValue 此值可用于设置和比较从此虚拟机中的变量或字段检索的值。
        参数
        value - 要为其创建值的浮点数
        结果
        给定浮点数的FloatValue
      • mirrorOf

        DoubleValue mirrorOf​(double value)
        为给定值创建DoubleValue 此值可用于设置和比较从此虚拟机中的变量或字段检索的值。
        参数
        value - 要为其创建值的double
        结果
        给定双倍的DoubleValue
      • dispose

        void dispose()
        使此虚拟机镜像无效。 关闭目标VM的通信通道,目标VM准备接受来自此调试器或其他调试器的另一个后续连接,包括以下任务: 在断开连接之后,继续在目标VM中执行的任何当前方法调用。 完成任何此类方法调用后,调用线程将从最初停止的位置继续。

        源自此VirtualMachine的资源(ObjectReferences,ReferenceTypes等)将变为无效。

      • exit

        void exit​(int exitCode)
        使镜像的VM以给定的错误代码终止。 释放与此VirtualMachine关联的所有资源。 如果镜像VM是远程的,则将关闭其通信通道。 源自此VirtualMachine的资源(ObjectReferences,ReferenceTypes等)将变为无效。

        在镜像VM中运行的线程突然终止。 不会抛出线程死亡异常,最后不会运行块。

        参数
        exitCode - 目标VM的退出代码。 在某些平台上,退出代码可能会被截断,例如,低位8位。
        异常
        VMCannotBeModifiedException - 如果VirtualMachine是只读的 - 请参阅 canBeModified()
      • canWatchFieldModification

        boolean canWatchFieldModification()
        确定目标VM是否支持用于字段修改的观察点。
        结果
        true如果支持该功能,否则为 false
      • canWatchFieldAccess

        boolean canWatchFieldAccess()
        确定目标VM是否支持用于字段访问的观察点。
        结果
        true如果支持该功能,否则为 false
      • canGetBytecodes

        boolean canGetBytecodes()
        确定目标VM是否支持检索方法的字节码。
        结果
        true如果支持该功能),否则为 false
      • canGetSyntheticAttribute

        boolean canGetSyntheticAttribute()
        确定目标VM是否支持查询方法或字段的合成属性。
        结果
        true如果支持该功能),否则为 false
      • canGetOwnedMonitorInfo

        boolean canGetOwnedMonitorInfo()
        确定目标VM是否支持检索线程拥有的监视器。
        结果
        true如果支持该功能),否则为 false
      • canGetCurrentContendedMonitor

        boolean canGetCurrentContendedMonitor()
        确定目标VM是否支持检索线程当前正在等待的监视器。
        结果
        true如果支持该功能),否则为 false
      • canGetMonitorInfo

        boolean canGetMonitorInfo()
        确定目标VM是否支持检索对象的监视器信息。
        结果
        true如果支持该功能),否则为 false
      • canPopFrames

        boolean canPopFrames()
        确定目标VM是否支持弹出线程堆栈的帧。
        结果
        true如果支持该功能),否则为 false
        从以下版本开始:
        1.4
        另请参见:
        ThreadReference.popFrames(com.sun.jdi.StackFrame)
      • canGetSourceDebugExtension

        boolean canGetSourceDebugExtension()
        确定目标VM是否支持获取源调试扩展。
        结果
        true如果支持该功能,否则为 false
        从以下版本开始:
        1.4
        另请参见:
        ReferenceType.sourceDebugExtension()
      • canForceEarlyReturn

        boolean canForceEarlyReturn()
        确定目标VM是否支持强制方法提前返回。
        结果
        true如果支持该功能,否则为 false
        从以下版本开始:
        1.6
        另请参见:
        ThreadReference.forceEarlyReturn(Value)
      • canBeModified

        boolean canBeModified()
        确定目标VM是否为只读VM。 如果在只读VM上调用将修改VM状态的方法,则抛出VMCannotBeModifiedException
        结果
        true如果支持该功能),否则为 false
        从以下版本开始:
        1.5
      • canGetMonitorFrameInfo

        boolean canGetMonitorFrameInfo()
        确定目标VM是否支持获取已获取监视器的帧。
        结果
        true如果支持该功能,否则为 false
        从以下版本开始:
        1.6
        另请参见:
        ThreadReference.ownedMonitorsAndFrames()
      • canGetClassFileVersion

        boolean canGetClassFileVersion()
        确定目标VM是否支持读取类文件主要版本和次要版本。
        结果
        true如果支持该功能,否则为 false
        从以下版本开始:
        1.6
        另请参见:
        ReferenceType.majorVersion()ReferenceType.minorVersion()
      • canGetModuleInfo

        default boolean canGetModuleInfo()
        确定目标VM是否支持获取有关模块的信息。
        实现要求:
        默认实现返回 false
        结果
        true如果支持该功能,否则为 false
        从以下版本开始:
        9
        另请参见:
        allModules()ReferenceType.module()ModuleReference
      • setDefaultStratum

        void setDefaultStratum​(String stratum)
        设置此VM的默认层(有关层的讨论,请参阅Location )。 覆盖类文件中的每类默认设置。

        影响位置查询(例如, Location.sourceName() )和单步执行中使用的线边界。

        参数
        stratum - 要设置为VM默认值的层,或使用每类默认值为null。
        异常
        UnsupportedOperationException - 如果目标虚拟机不支持此操作。
        从以下版本开始:
        1.4
      • instanceCounts

        long[] instanceCounts​(List<? extends ReferenceType> refTypes)
        返回'refTypes'列表中每个ReferenceType的实例数。 仅计算可用于垃圾收集目的的实例。

        并非所有目标虚拟机都支持此操作。 使用canGetInstanceInfo()确定是否支持该操作。

        参数
        refTypes - 要获取计数的ReferenceType对象的列表。
        结果
        一个long的数组, long包含“refTypes”列表中每个元素的一个元素。 数组的元素i包含'refTypes'列表中位置i处ReferenceType的目标VM中的实例数。 如果'refTypes'列表为空,则返回零长度数组。 如果refTypes中的ReferenceType已被垃圾回收,则为其实例计数返回零。
        异常
        UnsupportedOperationException - 如果目标虚拟机不支持此操作 - 请参阅 canGetInstanceInfo()
        NullPointerException - 如果'refTypes'列表为null。
        从以下版本开始:
        1.6
        另请参见:
        ReferenceType.instances(long)ObjectReference.referringObjects(long)
      • name

        String name()
        返回属性 java.vm.name报告的目标VM的名称。
        结果
        目标VM名称。
      • setDebugTraceMode

        void setDebugTraceMode​(int traceFlags)
        跟踪com.sun.jdi实现执行的活动。 所有跟踪信息都输出到System.err。 给定的跟踪标志用于将输出限制为仅所需的信息。 给定的标志生效,相应的跟踪将继续,直到下一次调用此方法。

        输出取决于实现,并且可以忽略跟踪模式。

        参数
        traceFlags - 标识要启用的跟踪类型。