Module  jdk.jdi
软件包  com.sun.jdi

Interface ClassType

    • 字段详细信息

      • INVOKE_SINGLE_THREADED

        static final int INVOKE_SINGLE_THREADED
        仅执行调用线程执行方法调用
        另请参见:
        Constant Field Values
    • 方法详细信息

      • superclass

        ClassType superclass​()
        获取此类的超类。
        结果
        一个ClassType镜像目标VM中此类的超类。 如果没有这样的类存在,返回null
      • interfaces

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

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

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

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

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

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

        参数
        field - 要设置的字段。
        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
        在目标虚拟机中调用指定的静态方法 指定的方法可以在此类中定义,也可以在超类中定义。 该方法必须是静态方法,而不是静态初始化程序。 使用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()暂停,那么将重新启动目标虚拟机中的所有线程。 这样做是为了防止如果任何线程拥有调用方法需要的监视器,将会发生死锁。 但是请注意,这个隐式的恢复与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()