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

Interface ClassType

    • 字段详细信息

      • INVOKE_SINGLE_THREADED

        static final int INVOKE_SINGLE_THREADED
        仅在恢复调用线程的情况下执行方法调用
        另请参见:
        常数字段值
    • 方法详细信息

      • superclass

        ClassType superclass()
        获取此类的超类。
        结果
        ClassType ,它在目标VM中镜像此类的超类。 如果不存在此类,则返回null
      • interfaces

        List<InterfaceType> interfaces()
        获取此类直接实现的接口。 仅包含在此类中使用“implements”关键字声明的接口。
        结果
        一个InterfaceType对象的列表, 每个对象镜像目标VM中此ClassType的直接接口。 如果不存在,则返回零长度List。
        异常
        ClassNotPreparedException - 如果这个班级尚未准备好。
      • allInterfaces

        List<InterfaceType> allInterfaces()
        获取此类直接和间接实现的接口。 返回interfaces()返回的接口以及所有超接口。
        结果
        一个InterfaceType对象的列表, 每个对象镜像目标VM中此ClassType的接口。 如果不存在,则返回零长度List。
        异常
        ClassNotPreparedException - 如果这个班级尚未准备好。
      • subclasses

        List<ClassType> subclasses()
        获取此类的当前加载的直接子类。 无法保证此列表的排序。
        结果
        一个ClassType对象的列表, 每个对象镜像目标VM中此类的已加载子类。 如果不存在此类,则此方法返回零长度列表。
      • isEnum

        boolean isEnum()
        确定此类是否声明为枚举。
        结果
        true如果此类被声明为枚举; 否则是假的。
      • setValue

        void setValue​(字段 field,              Value value)       throws InvalidTypeException,              ClassNotLoadedException
        为静态字段分配值。 字段必须对此ClassType有效; 也就是说,它必须来自镜像对象的类或该类的超类。 该领域不能是最终的。

        对象值必须与字段类型兼容(这意味着必须通过封闭类的类加载器加载字段类型)。 原始值必须是与字段类型兼容的赋值,或者必须可转换为字段类型而不会丢失信息。 有关分配兼容性的更多信息,请参阅JLS第5.2节。

        参数
        字段 - 要设置的字段。
        value - 要分配的值。
        异常
        IllegalArgumentException - 如果该字段不是静态字段,则该字段为final,或该字段在此类中不存在。
        ClassNotLoadedException - 如果尚未通过适当的类加载器加载字段类型。
        InvalidTypeException - 如果值的类型与字段的声明类型不匹配。
        VMCannotBeModifiedException - 如果VirtualMachine是只读的 - 请参阅 VirtualMachine.canBeModified()
      • invokeMethod

        Value invokeMethod​(ThreadReference thread,                   方法 method,                   List<? extends Value> arguments,                   int options)            throws InvalidTypeException,                   ClassNotLoadedException,                   IncompatibleThreadStateException,                   InvocationException
        在目标VM中调用指定的静态方法 指定的方法可以在此类中定义,也可以在超类中定义。 该方法必须是静态方法,但不是静态初始化程序。 使用newInstance(com.sun.jdi.ThreadReference, com.sun.jdi.Method, java.util.List<? extends com.sun.jdi.Value>, int)创建一个新对象并运行其构造函数。

        方法调用将在指定的线程中进行。 仅当指定的线程已被该线程中发生的事件挂起时,才会发生方法调用。 当目标VM已通过悬浮不支持方法调用VirtualMachine.suspend()或当指定的线程通过挂起ThreadReference.suspend()

        使用指定参数列表中的参数调用指定的方法。 方法调用是同步的; 在调用的方法在目标VM中返回之前,此方法不会返回。 如果被调用的方法抛出异常,则此方法将抛出一个InvocationException ,其中包含抛出异常对象的镜像。

        对象参数必须与参数类型兼容(这意味着必须通过封闭类'类加载器加载参数类型)。 原始参数必须是与参数类型兼容的赋值,或者必须可转换为参数类型而不会丢失信息。 如果被调用的方法接受可变数量的参数,则最后一个参数类型是某个组件类型的数组。 匹配位置中的参数可以省略,或者可以为null,相同组件类型的数组,或组件类型的参数,后跟任意数量的相同类型的其他参数。 如果省略该参数,则传递组件类型的0长度数组。 组件类型可以是基本类型。 不支持自动装箱。 有关分配兼容性的更多信息,请参见The Java™ Language Specification的第5.2节。

        默认情况下,如果先前由事件或VirtualMachine.suspend()ThreadReference.suspend()暂停,则在调用方法时,将恢复目标VM中的所有线程。 这样做是为了防止在任何线程拥有被调用方法所需的监视器时将发生的死锁。 但请注意,此隐式恢复的行为与ThreadReference.resume()完全相同,因此如果线程的挂起计数大于1,则在调用期间它将保持挂起状态,因此仍可能发生死锁。 默认情况下,调用完成后,目标VM中的所有线程都将被挂起,无论它们在调用之前的状态如何。 调用期间可能会发生断点或其他事件。 这可能导致如上所述的死锁。 如果从客户端的事件处理程序线程调用invokeMethod,它也可能导致死锁。 在这种情况下,此线程将等待invokeMethod完成,并且不会读取新事件的EventSet。 如果这个新的EventSet是SUSPEND_ALL,那么就会发生死锁,因为没有人会恢复EventSet。 为避免这种情况,应在执行invokeMethod之前禁用所有EventRequests,或者不应从客户端的事件处理程序线程执行invokeMethod。

        通过在options参数中指定INVOKE_SINGLE_THREADED位标志,可以防止在调用期间恢复其他线程。 但是,没有针对上述死锁的保护或恢复,因此应谨慎使用此选项。 只恢复指定的线程(如上面所有线程所述)。 完成单线程调用后,将再次暂停调用线程。 请注意,在调用完成时,不会挂起在单线程调用期间启动的任何线程。

        如果在调用期间断开目标VM(例如,通过VirtualMachine.dispose() ),则方法调用将继续。

        参数
        thread - 要调用的线程。
        method - 要调用的方法
        arguments - 绑定到调用方法的Value参数列表。 列表中的值按它们在方法签名中出现的顺序分配给参数。
        options - 整数位标志选项。
        结果
        一个Value镜像的被调用方法的返回值。
        异常
        IllegalArgumentException - 如果方法不是此类或超类的成员,如果参数列表的大小与方法的已声明参数的数量不匹配,或者该方法是初始化程序,构造函数或静态初始化程序。
        ClassNotLoadedException - 如果尚未通过适当的类加载器加载任何参数类型。
        IncompatibleThreadStateException - 如果指定的线程尚未被事件挂起。
        InvocationException - 如果方法调用导致目标VM中出现异常。
        InvalidTypeException - 如果参数不符合此要求 - 对象参数必须与参数类型兼容。 这意味着必须通过封闭类的类加载器加载参数类型。 原始参数必须是与参数类型兼容的赋值,或者必须可转换为参数类型而不会丢失信息。 有关分配兼容性的更多信息,请参阅JLS第5.2节。
        VMCannotBeModifiedException - 如果VirtualMachine是只读的 - 请参阅 VirtualMachine.canBeModified()
      • newInstance

        ObjectReference newInstance​(ThreadReference thread,                            方法 method,                            List<? extends Value> arguments,                            int options)                     throws InvalidTypeException,                            ClassNotLoadedException,                            IncompatibleThreadStateException,                            InvocationException
        使用目标VM中的给定构造函数方法构造此类型的新实例。 必须在此类中定义指定的构造函数。

        实例创建将在指定的线程中进行。 仅当指定的线程已被该线程中发生的事件挂起时,才能进行实例创建。 当目标VM已通过暂停不支持实例创建VirtualMachine.suspend()或在指定的线程通过暂停ThreadReference.suspend()

        使用指定参数列表中的参数调用指定的构造函数。 调用是同步的; 在构造函数在目标VM中返回之前,此方法不会返回。 如果被调用的方法抛出异常,则此方法将抛出一个InvocationException ,其中包含抛出异常对象的镜像。

        对象参数必须与参数类型兼容(这意味着必须通过封闭类'类加载器加载参数类型)。 原始参数必须是与参数类型兼容的赋值,或者必须可转换为参数类型而不会丢失信息。 如果被调用的方法接受可变数量的参数,则最后一个参数类型是某个组件类型的数组。 匹配位置中的参数可以省略,或者可以为null,相同组件类型的数组或组件类型的参数,后跟任意数量的相同类型的其他参数。 如果省略该参数,则传递组件类型的0长度数组。 组件类型可以是基本类型。 不支持自动装箱。 有关分配兼容性的更多信息,请参见The Java™ Language Specification的 5.2节。

        默认情况下,如果先前由事件或VirtualMachine.suspend()ThreadReference.suspend()暂停,则在调用方法时,将恢复目标VM中的所有线程。 这样做是为了防止在任何线程拥有被调用方法所需的监视器时将发生的死锁。 调用期间可能会发生断点或其他事件。 但请注意,此隐式恢复的行为与ThreadReference.resume()完全相同,因此如果线程的挂起计数大于1,则在调用期间它将保持挂起状态。 默认情况下,调用完成后,目标VM中的所有线程都将被挂起,无论它们在调用之前的状态如何。

        通过在options参数中指定INVOKE_SINGLE_THREADED位标志,可以防止在调用期间恢复其他线程。 但是,没有针对上述死锁的保护或恢复,因此应谨慎使用此选项。 只恢复指定的线程(如上面所有线程所述)。 完成单线程调用后,将再次暂停调用线程。 请注意,在调用完成时,不会挂起在单线程调用期间启动的任何线程。

        如果在调用期间断开目标VM(例如,通过VirtualMachine.dispose() ),则方法调用将继续。

        参数
        thread - 要调用的线程。
        method - 要调用的构造函数方法
        arguments - 绑定到被调用的构造函数的Value参数的列表。 列表中的值按照它们在构造函数签名中出现的顺序分配给参数。
        options - 整数位标志选项。
        结果
        新创建的对象的ObjectReference镜像。
        异常
        IllegalArgumentException - 如果方法不是此类的成员,如果参数列表的大小与构造函数的已声明参数的数量不匹配,或者该方法不是构造函数。
        ClassNotLoadedException - 如果尚未通过适当的类加载器加载任何参数类型。
        IncompatibleThreadStateException - 如果指定的线程尚未被事件挂起。
        InvocationException - 如果方法调用导致目标VM中出现异常。
        InvalidTypeException - 如果参数不符合此要求 - 对象参数必须与参数类型兼容。 这意味着必须通过封闭类的类加载器加载参数类型。 原始参数必须是与参数类型兼容的赋值,或者必须可转换为参数类型而不会丢失信息。 有关分配兼容性的更多信息,请参阅JLS第5.2节。
        VMCannotBeModifiedException - 如果VirtualMachine是只读的 - 请参阅 VirtualMachine.canBeModified()