public interface

VirtualMachine

implements Mirror
com.sun.jdi.VirtualMachine
Known Indirect Subclasses

Class Overview

A virtual machine targeted for debugging. More precisely, a mirror representing the composite state of the target VM. All other mirrors are associated with an instance of this interface. Access to all other mirrors is achieved directly or indirectly through an instance of this interface. Access to global VM properties and control of VM execution are supported directly by this interface.

Instances of this interface are created by instances of Connector. For example, an AttachingConnector attaches to a target VM and returns its virtual machine mirror. A Connector will typically create a VirtualMachine by invoking the VirtualMachineManager's createVirtualMachine(Connection) createVirtualMachine(Connection) method.

Note that a target VM launched by a launching connector is not guaranteed to be stable until after the VMStartEvent has been received.

Any method on VirtualMachine which takes VirtualMachine as an parameter may throw VMDisconnectedException if the target VM is disconnected and the VMDisconnectEvent has been or is available to be read from the EventQueue.

Any method on VirtualMachine which takes VirtualMachine as an parameter may throw VMOutOfMemoryException if the target VM has run out of memory.

Summary

Constants
int TRACE_ALL All tracing is enabled.
int TRACE_EVENTS Tracing enabled for internal event handling.
int TRACE_NONE All tracing is disabled.
int TRACE_OBJREFS Tracing enabled for internal management of object references.
int TRACE_RECEIVES Tracing enabled for JDWP packets received from target VM.
int TRACE_REFTYPES Tracing enabled for internal managment of reference types.
int TRACE_SENDS Tracing enabled for JDWP packets sent to target VM.
Public Methods
abstract List<ReferenceType> allClasses()
Returns all loaded types.
abstract List<ThreadReference> allThreads()
Returns a list of the currently running threads.
abstract boolean canAddMethod()
Determines if the target VM supports the addition of methods when performing class redefinition.
abstract boolean canBeModified()
Determines if the target VM is a read-only VM.
abstract boolean canForceEarlyReturn()
Determines if the target VM supports the forcing of a method to return early.
abstract boolean canGetBytecodes()
Determines if the target VM supports the retrieval of a method's bytecodes.
abstract boolean canGetClassFileVersion()
Determines if the target VM supports reading class file major and minor versions.
abstract boolean canGetConstantPool()
Determines if the target VM supports getting constant pool information of a class.
abstract boolean canGetCurrentContendedMonitor()
Determines if the target VM supports the retrieval of the monitor for which a thread is currently waiting.
abstract boolean canGetInstanceInfo()
Determines if the target VM supports the accessing of class instances, instance counts, and referring objects.
abstract boolean canGetMethodReturnValues()
Determines if the target VM supports the inclusion of return values in MethodExitEvents.
abstract boolean canGetMonitorFrameInfo()
Determines if the target VM supports getting which frame has acquired a monitor.
abstract boolean canGetMonitorInfo()
Determines if the target VM supports the retrieval of the monitor information for an object.
abstract boolean canGetOwnedMonitorInfo()
Determines if the target VM supports the retrieval of the monitors owned by a thread.
abstract boolean canGetSourceDebugExtension()
Determines if the target VM supports getting the source debug extension.
abstract boolean canGetSyntheticAttribute()
Determines if the target VM supports the query of the synthetic attribute of a method or field.
abstract boolean canPopFrames()
Determines if the target VM supports popping frames of a threads stack.
abstract boolean canRedefineClasses()
Determines if the target VM supports any level of class redefinition.
abstract boolean canRequestMonitorEvents()
Determines if the target VM supports the creation of MonitorContendedEnterRequests.
abstract boolean canRequestVMDeathEvent()
Determines if the target VM supports the creation of VMDeathRequests.
abstract boolean canUnrestrictedlyRedefineClasses()
Determines if the target VM supports unrestricted changes when performing class redefinition.
abstract boolean canUseInstanceFilters()
Determines if the target VM supports filtering events by specific instance object.
abstract boolean canUseSourceNameFilters()
Determines if the target VM supports the filtering of class prepare events by source name.
abstract boolean canWatchFieldAccess()
Determines if the target VM supports watchpoints for field access.
abstract boolean canWatchFieldModification()
Determines if the target VM supports watchpoints for field modification.
abstract List<ReferenceType> classesByName(String className)
Returns the loaded reference types that match a given name.
abstract String description()
Returns text information on the target VM and the debugger support that mirrors it.
abstract void dispose()
Invalidates this virtual machine mirror.
abstract EventQueue eventQueue()
Returns the event queue for this virtual machine.
abstract EventRequestManager eventRequestManager()
Returns the event request manager for this virtual machine.
abstract void exit(int exitCode)
Causes the mirrored VM to terminate with the given error code.
abstract String getDefaultStratum()
Return this VM's default stratum.
abstract long[] instanceCounts(List<? extends ReferenceType> refTypes)
Returns the number of instances of each ReferenceType in the 'refTypes' list.
abstract BooleanValue mirrorOf(boolean value)
Creates a BooleanValue for the given value.
abstract FloatValue mirrorOf(float value)
Creates a FloatValue for the given value.
abstract StringReference mirrorOf(String value)
Creates a string in this virtual machine.
abstract ByteValue mirrorOf(byte value)
Creates a ByteValue for the given value.
abstract CharValue mirrorOf(char value)
Creates a CharValue for the given value.
abstract LongValue mirrorOf(long value)
Creates a LongValue for the given value.
abstract ShortValue mirrorOf(short value)
Creates a ShortValue for the given value.
abstract IntegerValue mirrorOf(int value)
Creates an IntegerValue for the given value.
abstract DoubleValue mirrorOf(double value)
Creates a DoubleValue for the given value.
abstract VoidValue mirrorOfVoid()
Creates a VoidValue.
abstract String name()
Returns the name of the target VM as reported by the property java.vm.name.
abstract Process process()
Returns the Process object for this virtual machine if launched by a LaunchingConnector
abstract void redefineClasses(Map<? extends ReferenceType, byte[]> classToBytes)
All classes given are redefined according to the definitions supplied.
abstract void resume()
Continues the execution of the application running in this virtual machine.
abstract void setDebugTraceMode(int traceFlags)
Traces the activities performed by the com.sun.jdi implementation.
abstract void setDefaultStratum(String stratum)
Set this VM's default stratum (see Location for a discussion of strata).
abstract void suspend()
Suspends the execution of the application running in this virtual machine.
abstract List<ThreadGroupReference> topLevelThreadGroups()
Returns each thread group which does not have a parent.
abstract String version()
Returns the version of the Java Runtime Environment in the target VM as reported by the property java.version.
[Expand]
Inherited Methods
From interface com.sun.jdi.Mirror

Constants

public static final int TRACE_ALL

All tracing is enabled.

Constant Value: 16777215 (0x00ffffff)

public static final int TRACE_EVENTS

Tracing enabled for internal event handling.

Constant Value: 4 (0x00000004)

public static final int TRACE_NONE

All tracing is disabled.

Constant Value: 0 (0x00000000)

public static final int TRACE_OBJREFS

Tracing enabled for internal management of object references.

Constant Value: 16 (0x00000010)

public static final int TRACE_RECEIVES

Tracing enabled for JDWP packets received from target VM.

Constant Value: 2 (0x00000002)

public static final int TRACE_REFTYPES

Tracing enabled for internal managment of reference types.

Constant Value: 8 (0x00000008)

public static final int TRACE_SENDS

Tracing enabled for JDWP packets sent to target VM.

Constant Value: 1 (0x00000001)

Public Methods

public abstract List<ReferenceType> allClasses ()

Returns all loaded types. For each loaded type in the target VM a ReferenceType will be placed in the returned list. The list will include ReferenceTypes which mirror classes, interfaces, and array types.

The returned list will include reference types loaded at least to the point of preparation and types (like array) for which preparation is not defined.

Returns
  • a list of ReferenceType objects, each mirroring a loaded type in the target VM.

public abstract List<ThreadReference> allThreads ()

Returns a list of the currently running threads. For each running thread in the target VM, a ThreadReference that mirrors it is placed in the list. The returned list contains threads created through java.lang.Thread, all native threads attached to the target VM through JNI, and system threads created by the target VM. Thread objects that have not yet been started (see Thread.start()) and thread objects that have completed their execution are not included in the returned list.

Returns
  • a list of ThreadReference objects, one for each running thread in the mirrored VM.

public abstract boolean canAddMethod ()

Determines if the target VM supports the addition of methods when performing class redefinition.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canBeModified ()

Determines if the target VM is a read-only VM. If a method which would modify the state of the VM is called on a read-only VM, then VMCannotBeModifiedException is thrown.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canForceEarlyReturn ()

Determines if the target VM supports the forcing of a method to return early.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetBytecodes ()

Determines if the target VM supports the retrieval of a method's bytecodes.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetClassFileVersion ()

Determines if the target VM supports reading class file major and minor versions.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetConstantPool ()

Determines if the target VM supports getting constant pool information of a class.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetCurrentContendedMonitor ()

Determines if the target VM supports the retrieval of the monitor for which a thread is currently waiting.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetInstanceInfo ()

Determines if the target VM supports the accessing of class instances, instance counts, and referring objects.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetMethodReturnValues ()

Determines if the target VM supports the inclusion of return values in MethodExitEvents.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetMonitorFrameInfo ()

Determines if the target VM supports getting which frame has acquired a monitor.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetMonitorInfo ()

Determines if the target VM supports the retrieval of the monitor information for an object.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetOwnedMonitorInfo ()

Determines if the target VM supports the retrieval of the monitors owned by a thread.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetSourceDebugExtension ()

Determines if the target VM supports getting the source debug extension.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canGetSyntheticAttribute ()

Determines if the target VM supports the query of the synthetic attribute of a method or field.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canPopFrames ()

Determines if the target VM supports popping frames of a threads stack.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canRedefineClasses ()

Determines if the target VM supports any level of class redefinition.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canRequestMonitorEvents ()

public abstract boolean canRequestVMDeathEvent ()

Determines if the target VM supports the creation of VMDeathRequests.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canUnrestrictedlyRedefineClasses ()

Determines if the target VM supports unrestricted changes when performing class redefinition.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canUseInstanceFilters ()

Determines if the target VM supports filtering events by specific instance object. For example, see addInstanceFilter(ObjectReference).

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canUseSourceNameFilters ()

Determines if the target VM supports the filtering of class prepare events by source name. see addSourceNameFilter(String).

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canWatchFieldAccess ()

Determines if the target VM supports watchpoints for field access.

Returns
  • true if the feature is supported, false otherwise.

public abstract boolean canWatchFieldModification ()

Determines if the target VM supports watchpoints for field modification.

Returns
  • true if the feature is supported, false otherwise.

public abstract List<ReferenceType> classesByName (String className)

Returns the loaded reference types that match a given name. The name must be fully qualified (for example, java.lang.String). The returned list will contain a ReferenceType for each class or interface found with the given name. The search is confined to loaded classes only; no attempt is made to load a class of the given name.

The returned list will include reference types loaded at least to the point of preparation and types (like array) for which preparation is not defined.

Parameters
className the class/interface name to search for
Returns
  • a list of ReferenceType objects, each mirroring a type in the target VM with the given name.

public abstract String description ()

Returns text information on the target VM and the debugger support that mirrors it. No specific format for this information is guaranteed. Typically, this string contains version information for the target VM and debugger interfaces. More precise information on VM and JDI versions is available through version(), majorInterfaceVersion(), and minorInterfaceVersion()

Returns
  • the description.

public abstract void dispose ()

Invalidates this virtual machine mirror. The communication channel to the target VM is closed, and the target VM prepares to accept another subsequent connection from this debugger or another debugger, including the following tasks:

  • All event requests are cancelled.
  • All threads suspended by suspend() or by suspend() are resumed as many times as necessary for them to run.
  • Garbage collection is re-enabled in all cases where it was disabled through disableCollection().
Any current method invocations executing in the target VM are continued after the disconnection. Upon completion of any such method invocation, the invoking thread continues from the location where it was originally stopped.

Resources originating in this VirtualMachine (ObjectReferences, ReferenceTypes, etc.) will become invalid.

public abstract EventQueue eventQueue ()

Returns the event queue for this virtual machine. A virtual machine has only one EventQueue object, this method will return the same instance each time it is invoked.

Returns
Throws
VMCannotBeModifiedException if the VirtualMachine is read-only - see canBeModified().

public abstract EventRequestManager eventRequestManager ()

Returns the event request manager for this virtual machine. The EventRequestManager controls user settable events such as breakpoints. A virtual machine has only one EventRequestManager object, this method will return the same instance each time it is invoked.

Returns
Throws
VMCannotBeModifiedException if the VirtualMachine is read-only - see canBeModified().

public abstract void exit (int exitCode)

Causes the mirrored VM to terminate with the given error code. All resources associated with this VirtualMachine are freed. If the mirrored VM is remote, the communication channel to it will be closed. Resources originating in this VirtualMachine (ObjectReferences, ReferenceTypes, etc.) will become invalid.

Threads running in the mirrored VM are abruptly terminated. A thread death exception is not thrown and finally blocks are not run.

Parameters
exitCode the exit code for the target VM. On some platforms, the exit code might be truncated, for example, to the lower order 8 bits.
Throws
VMCannotBeModifiedException if the VirtualMachine is read-only - see canBeModified().

public abstract String getDefaultStratum ()

Return this VM's default stratum.

Returns

public abstract long[] instanceCounts (List<? extends ReferenceType> refTypes)

Returns the number of instances of each ReferenceType in the 'refTypes' list. Only instances that are reachable for the purposes of garbage collection are counted.

Not all target virtual machines support this operation. Use canGetInstanceInfo() to determine if the operation is supported.

Parameters
refTypes the list of ReferenceType objects for which counts are to be obtained.
Returns
  • an array of long containing one element for each element in the 'refTypes' list. Element i of the array contains the number of instances in the target VM of the ReferenceType at position i in the 'refTypes' list. If the 'refTypes' list is empty, a zero-length array is returned. If a ReferenceType in refTypes has been garbage collected, zero is returned for its instance count.
Throws
UnsupportedOperationException if the target virtual machine does not support this operation - see canGetInstanceInfo()
NullPointerException if the 'refTypes' list is null.

public abstract BooleanValue mirrorOf (boolean value)

Creates a BooleanValue for the given value. This value can be used for setting and comparing against a value retrieved from a variable or field in this virtual machine.

Parameters
value a boolean for which to create the value
Returns

public abstract FloatValue mirrorOf (float value)

Creates a FloatValue for the given value. This value can be used for setting and comparing against a value retrieved from a variable or field in this virtual machine.

Parameters
value a float for which to create the value
Returns

public abstract StringReference mirrorOf (String value)

Creates a string in this virtual machine. The created string can be used for setting and comparing against a string value retrieved from a variable or field in this virtual machine.

Parameters
value the string to be created
Returns
Throws
VMCannotBeModifiedException if the VirtualMachine is read-only -see canBeModified().

public abstract ByteValue mirrorOf (byte value)

Creates a ByteValue for the given value. This value can be used for setting and comparing against a value retrieved from a variable or field in this virtual machine.

Parameters
value a byte for which to create the value
Returns

public abstract CharValue mirrorOf (char value)

Creates a CharValue for the given value. This value can be used for setting and comparing against a value retrieved from a variable or field in this virtual machine.

Parameters
value a char for which to create the value
Returns

public abstract LongValue mirrorOf (long value)

Creates a LongValue for the given value. This value can be used for setting and comparing against a value retrieved from a variable or field in this virtual machine.

Parameters
value a long for which to create the value
Returns

public abstract ShortValue mirrorOf (short value)

Creates a ShortValue for the given value. This value can be used for setting and comparing against a value retrieved from a variable or field in this virtual machine.

Parameters
value a short for which to create the value
Returns

public abstract IntegerValue mirrorOf (int value)

Creates an IntegerValue for the given value. This value can be used for setting and comparing against a value retrieved from a variable or field in this virtual machine.

Parameters
value an int for which to create the value
Returns

public abstract DoubleValue mirrorOf (double value)

Creates a DoubleValue for the given value. This value can be used for setting and comparing against a value retrieved from a variable or field in this virtual machine.

Parameters
value a double for which to create the value
Returns

public abstract VoidValue mirrorOfVoid ()

Creates a VoidValue. This value can be passed to forceEarlyReturn(Value) when a void method is to be exited.

Returns

public abstract String name ()

Returns the name of the target VM as reported by the property java.vm.name.

Returns
  • the target VM name.

public abstract Process process ()

Returns the Process object for this virtual machine if launched by a LaunchingConnector

Returns
Throws
VMCannotBeModifiedException if the VirtualMachine is read-only -see canBeModified().

public abstract void redefineClasses (Map<? extends ReferenceType, byte[]> classToBytes)

All classes given are redefined according to the definitions supplied. A method in a redefined class is called 'equivalent' (to the old version of the method) if

  • their bytecodes are the same except for indicies into the constant pool, and
  • the referenced constants are equal.
Otherwise, the new method is called 'non-equivalent'. If a redefined method has active stack frames, those active frames continue to run the bytecodes of the previous version of the method. If the new version of such a method is non-equivalent, then a method from one of these active frames is called 'obsolete' and Method.isObsolete() will return true when called on one of these methods. If resetting such a frame is desired, use ThreadReference.popFrames(StackFrame) to pop the old obsolete method execution from the stack. New invocations of redefined methods will always invoke the new versions.

This function does not cause any initialization except that which would occur under the customary JVM semantics. In other words, redefining a class does not cause its initializers to be run. The values of preexisting static variables will remain as they were prior to the call. However, completely uninitialized (new) static variables will be assigned their default value.

If a redefined class has instances then all those instances will have the fields defined by the redefined class at the completion of the call. Preexisting fields will retain their previous values. Any new fields will have their default values; no instance initializers or constructors are run.

Threads need not be suspended.

No events are generated by this function.

All breakpoints in the redefined classes are deleted.

Not all target virtual machines support this operation. Use canRedefineClasses() to determine if the operation is supported. Use canAddMethod() to determine if the redefinition can add methods. Use canUnrestrictedlyRedefineClasses() to determine if the redefinition can change the schema, delete methods, change the class hierarchy, etc.

Parameters
classToBytes A map from ReferenceType to array of byte. The bytes represent the new class definition and are in Java Virtual Machine class file format.
Throws
UnsupportedOperationException if the target virtual machine does not support this operation.
  • If canRedefineClasses() is false any call of this method will throw this exception.
  • If canAddMethod() is false attempting to add a method will throw this exception.
  • If canUnrestrictedlyRedefineClasses() is false, attempting any of the following will throw this exception
    • changing the schema (the fields)
    • changing the hierarchy (subclasses, interfaces)
    • deleting a method
    • changing class modifiers
    • changing method modifiers
NoClassDefFoundError if the bytes don't correspond to the reference type (the names don't match).
VerifyError if a "verifier" detects that a class, though well formed, contains an internal inconsistency or security problem.
ClassFormatError if the bytes do not represent a valid class.
ClassCircularityError if a circularity has been detected while initializing a class.
UnsupportedClassVersionError if the major and minor version numbers in bytes are not supported by the VM.
VMCannotBeModifiedException if the VirtualMachine is read-only - see canBeModified().

public abstract void resume ()

Continues the execution of the application running in this virtual machine. All threads are resumed as documented in resume().

Throws
VMCannotBeModifiedException if the VirtualMachine is read-only - see canBeModified().
See Also

public abstract void setDebugTraceMode (int traceFlags)

Traces the activities performed by the com.sun.jdi implementation. All trace information is output to System.err. The given trace flags are used to limit the output to only the information desired. The given flags are in effect and the corresponding trace will continue until the next call to this method.

Output is implementation dependent and trace mode may be ignored.

Parameters
traceFlags identifies which kinds of tracing to enable.

public abstract void setDefaultStratum (String stratum)

Set this VM's default stratum (see Location for a discussion of strata). Overrides the per-class default set in the class file.

Affects location queries (such as, sourceName()) and the line boundaries used in single stepping.

Parameters
stratum the stratum to set as VM default, or null to use per-class defaults.
Throws
UnsupportedOperationException if the target virtual machine does not support this operation.

public abstract void suspend ()

Suspends the execution of the application running in this virtual machine. All threads currently running will be suspended.

Unlike Thread.suspend(), suspends of both the virtual machine and individual threads are counted. Before a thread will run again, it must be resumed (through resume() or resume()) the same number of times it has been suspended.

Throws
VMCannotBeModifiedException if the VirtualMachine is read-only - see canBeModified().

public abstract List<ThreadGroupReference> topLevelThreadGroups ()

Returns each thread group which does not have a parent. For each top level thread group a ThreadGroupReference is placed in the returned list.

This command may be used as the first step in building a tree (or trees) of the existing thread groups.

Returns

public abstract String version ()

Returns the version of the Java Runtime Environment in the target VM as reported by the property java.version. For obtaining the JDI interface version, use majorInterfaceVersion() and minorInterfaceVersion()

Returns
  • the target VM version.