Interface VirtualMachine
- All Superinterfaces:
Mirror
- All Known Subinterfaces:
PathSearchingVirtualMachine
public interface VirtualMachine extends Mirror
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 VirtualMachineManager.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.
- Since:
- 1.3
Field Summary
| Modifier and Type | Field | Description |
|---|---|---|
static final int |
TRACE_ALL |
All tracing is enabled. |
static final int |
TRACE_EVENTS |
Tracing enabled for internal event handling. |
static final int |
TRACE_NONE |
All tracing is disabled. |
static final int |
TRACE_OBJREFS |
Tracing enabled for internal management of object references. |
static final int |
TRACE_RECEIVES |
Tracing enabled for JDWP packets received from target VM. |
static final int |
TRACE_REFTYPES |
Tracing enabled for internal managment of reference types. |
static final int |
TRACE_SENDS |
Tracing enabled for JDWP packets sent to target VM. |
Method Summary
| Modifier and Type | Method | Description |
|---|---|---|
List<ReferenceType> |
allClasses() |
Returns all loaded types in the target VM. |
default List<ModuleReference> |
allModules() |
Returns all modules. |
List<ThreadReference> |
allThreads() |
Returns a list of the currently running threads. |
boolean |
canAddMethod() |
Deprecated. A JVM TI based JDWP back-end will never set this capability to true. |
boolean |
canBeModified() |
Determines if the target VM is a read-only VM. |
boolean |
canForceEarlyReturn() |
Determines if the target VM supports the forcing of a method to return early. |
boolean |
canGetBytecodes() |
Determines if the target VM supports the retrieval of a method's bytecodes. |
boolean |
canGetClassFileVersion() |
Determines if the target VM supports reading class file major and minor versions. |
boolean |
canGetConstantPool() |
Determines if the target VM supports getting constant pool information of a class. |
boolean |
canGetCurrentContendedMonitor() |
Determines if the target VM supports the retrieval of the monitor for which a thread is currently waiting. |
boolean |
canGetInstanceInfo() |
Determines if the target VM supports the accessing of class instances, instance counts, and referring objects. |
boolean |
canGetMethodReturnValues() |
Determines if the target VM supports the inclusion of return values in MethodExitEvents. |
default boolean |
canGetModuleInfo() |
Determines if the target VM supports getting information about modules. |
boolean |
canGetMonitorFrameInfo() |
Determines if the target VM supports getting which frame has acquired a monitor. |
boolean |
canGetMonitorInfo() |
Determines if the target VM supports the retrieval of the monitor information for an object. |
boolean |
canGetOwnedMonitorInfo() |
Determines if the target VM supports the retrieval of the monitors owned by a thread. |
boolean |
canGetSourceDebugExtension() |
Determines if the target VM supports getting the source debug extension. |
boolean |
canGetSyntheticAttribute() |
Determines if the target VM supports the query of the synthetic attribute of a method or field. |
boolean |
canPopFrames() |
Determines if the target VM supports popping frames of a threads stack. |
boolean |
canRedefineClasses() |
Determines if the target VM supports any level of class redefinition. |
boolean |
canRequestMonitorEvents() |
Determines if the target VM supports the creation of MonitorContendedEnterRequests. |
boolean |
canRequestVMDeathEvent() |
Determines if the target VM supports the creation of VMDeathRequests. |
boolean |
canUnrestrictedlyRedefineClasses() |
Deprecated. A JVM TI based JDWP back-end will never set this capability to true. |
boolean |
canUseInstanceFilters() |
Determines if the target VM supports filtering events by specific instance object. |
boolean |
canUseSourceNameFilters() |
Determines if the target VM supports the filtering of class prepare events by source name. |
boolean |
canWatchFieldAccess() |
Determines if the target VM supports watchpoints for field access. |
boolean |
canWatchFieldModification() |
Determines if the target VM supports watchpoints for field modification. |
List<ReferenceType> |
classesByName |
Returns the loaded reference types that match a given name. |
String |
description() |
Returns text information on the target VM and the debugger support that mirrors it. |
void |
dispose() |
Invalidates this virtual machine mirror. |
EventQueue |
eventQueue() |
Returns the event queue for this virtual machine. |
EventRequestManager |
eventRequestManager() |
Returns the event request manager for this virtual machine. |
void |
exit |
Causes the mirrored VM to terminate with the given error code. |
String |
getDefaultStratum() |
Return this VM's default stratum. |
long[] |
instanceCounts |
Returns the number of instances of each ReferenceType in the 'refTypes' list. |
BooleanValue |
mirrorOf |
Creates a BooleanValue for the given value. |
ByteValue |
mirrorOf |
Creates a ByteValue for the given value. |
CharValue |
mirrorOf |
Creates a CharValue for the given value. |
DoubleValue |
mirrorOf |
Creates a DoubleValue for the given value. |
FloatValue |
mirrorOf |
Creates a FloatValue for the given value. |
IntegerValue |
mirrorOf |
Creates an IntegerValue for the given value. |
LongValue |
mirrorOf |
Creates a LongValue for the given value. |
ShortValue |
mirrorOf |
Creates a ShortValue for the given value. |
StringReference |
mirrorOf |
Creates a string in this virtual machine. |
VoidValue |
mirrorOfVoid() |
Creates a VoidValue. |
String |
name() |
Returns the name of the target VM as reported by the property java.vm.name. |
Process |
process() |
Returns the Process object for this virtual machine if launched by a LaunchingConnector
|
void |
redefineClasses |
All classes given are redefined according to the definitions supplied. |
void |
resume() |
Continues the execution of the application running in this virtual machine. |
void |
setDebugTraceMode |
Traces the activities performed by the com.sun.jdi implementation. |
void |
setDefaultStratum |
Set this VM's default stratum (see Location for a discussion of strata). |
void |
suspend() |
Suspends the execution of the application running in this virtual machine. |
List<ThreadGroupReference> |
topLevelThreadGroups() |
Returns each thread group which does not have a parent. |
String |
version() |
Returns the version of the Java Runtime Environment in the target VM as reported by the property java.version. |
Methods declared in interface com.sun.jdi.Mirror
toString, virtualMachine
Field Details
TRACE_NONE
static final int TRACE_NONE
- See Also:
TRACE_SENDS
static final int TRACE_SENDS
- See Also:
TRACE_RECEIVES
static final int TRACE_RECEIVES
- See Also:
TRACE_EVENTS
static final int TRACE_EVENTS
- See Also:
TRACE_REFTYPES
static final int TRACE_REFTYPES
- See Also:
TRACE_OBJREFS
static final int TRACE_OBJREFS
- See Also:
TRACE_ALL
static final int TRACE_ALL
- See Also:
Method Details
allModules
default List<ModuleReference> allModules()
ModuleReference will be placed in the returned list. Not all target virtual machines support this operation. Use canGetModuleInfo() to determine if the operation is supported.
- Implementation Requirements:
- The default implementation throws
UnsupportedOperationException. - Returns:
- a list of
ModuleReferenceobjects, each mirroring a module in the target VM. - Throws:
-
UnsupportedOperationException- if the target virtual machine does not support this operation. - Since:
- 9
classesByName
List<ReferenceType> classesByName(String className)
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
ReferenceTypeobjects, each mirroring a type in the target VM with the given name.
allClasses
List<ReferenceType> allClasses()
The returned list includes all reference types, including hidden classes or interfaces, loaded at least to the point of preparation and types (like array) for which preparation is not defined.
- Returns:
- a list of
ReferenceTypeobjects, each mirroring a loaded type in the target VM. - See Also:
-
- JVM TI GetLoadedClasses regarding how class and interface creation can be triggered
redefineClasses
void redefineClasses(Map<? extends ReferenceType,byte[]> classToBytes)
- their bytecodes are the same except for indicies into the constant pool, and
- the referenced constants are equal.
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 fromReferenceTypeto 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 unsupported class file changes described in JVM TI RedefineClasses will throw this exception.
- If
-
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 - seecanBeModified(). - Since:
- 1.4
- See Also:
allThreads
List<ThreadReference> allThreads()
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
ThreadReferenceobjects, one for each running thread in the mirrored VM.
suspend
void suspend()
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 ThreadReference.resume()) the same number of times it has been suspended.
- Throws:
-
VMCannotBeModifiedException- if the VirtualMachine is read-only - seecanBeModified().
resume
void resume()
ThreadReference.resume().- Throws:
-
VMCannotBeModifiedException- if the VirtualMachine is read-only - seecanBeModified(). - See Also:
topLevelThreadGroups
List<ThreadGroupReference> topLevelThreadGroups()
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:
- a list of
ThreadGroupReferenceobjects, one for each top level thread group.
eventQueue
EventQueue eventQueue()
EventQueue object, this method will return the same instance each time it is invoked.- Returns:
- the
EventQueuefor this virtual machine. - Throws:
-
VMCannotBeModifiedException- if the VirtualMachine is read-only - seecanBeModified().
eventRequestManager
EventRequestManager eventRequestManager()
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:
- the
EventRequestManagerfor this virtual machine. - Throws:
-
VMCannotBeModifiedException- if the VirtualMachine is read-only - seecanBeModified().
mirrorOf
BooleanValue mirrorOf(boolean value)
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:
- the
BooleanValuefor the given boolean.
mirrorOf
ByteValue mirrorOf(byte value)
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:
- the
ByteValuefor the given byte.
mirrorOf
CharValue mirrorOf(char value)
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:
- the
CharValuefor the given char.
mirrorOf
ShortValue mirrorOf(short value)
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:
- the
ShortValuefor the given short.
mirrorOf
IntegerValue mirrorOf(int value)
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:
- the
IntegerValuefor the given int.
mirrorOf
LongValue mirrorOf(long value)
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:
- the
LongValuefor the given long.
mirrorOf
FloatValue mirrorOf(float value)
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:
- the
FloatValuefor the given float.
mirrorOf
DoubleValue mirrorOf(double value)
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:
- the
DoubleValuefor the given double.
mirrorOf
StringReference mirrorOf(String value)
- Parameters:
-
value- the string to be created - Returns:
- a
StringReferencethat mirrors the newly created string in the target VM. - Throws:
-
VMCannotBeModifiedException- if the VirtualMachine is read-only -seecanBeModified().
mirrorOfVoid
VoidValue mirrorOfVoid()
VoidValue. This value can be passed to ThreadReference.forceEarlyReturn(com.sun.jdi.Value) when a void method is to be exited.- Returns:
- the
VoidValue.
process
Process process()
Process object for this virtual machine if launched by a LaunchingConnector
- Returns:
- the
Processobject for this virtual machine, or null if it was not launched by aLaunchingConnector. - Throws:
-
VMCannotBeModifiedException- if the VirtualMachine is read-only -seecanBeModified().
dispose
void dispose()
- All event requests are cancelled.
- All threads suspended by
suspend()or byThreadReference.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
ObjectReference.disableCollection().
Resources originating in this VirtualMachine (ObjectReferences, ReferenceTypes, etc.) will become invalid.
exit
void exit(int exitCode)
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 - seecanBeModified().
canWatchFieldModification
boolean canWatchFieldModification()
- Returns:
-
trueif the feature is supported,falseotherwise.
canWatchFieldAccess
boolean canWatchFieldAccess()
- Returns:
-
trueif the feature is supported,falseotherwise.
canGetBytecodes
boolean canGetBytecodes()
- Returns:
-
trueif the feature is supported,falseotherwise.
canGetSyntheticAttribute
boolean canGetSyntheticAttribute()
- Returns:
-
trueif the feature is supported,falseotherwise.
canGetOwnedMonitorInfo
boolean canGetOwnedMonitorInfo()
- Returns:
-
trueif the feature is supported,falseotherwise.
canGetCurrentContendedMonitor
boolean canGetCurrentContendedMonitor()
- Returns:
-
trueif the feature is supported,falseotherwise.
canGetMonitorInfo
boolean canGetMonitorInfo()
- Returns:
-
trueif the feature is supported,falseotherwise.
canUseInstanceFilters
boolean canUseInstanceFilters()
BreakpointRequest.addInstanceFilter(com.sun.jdi.ObjectReference).- Returns:
-
trueif the feature is supported,falseotherwise.
canRedefineClasses
boolean canRedefineClasses()
- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.4
- See Also:
canAddMethod
@Deprecated(since="15") boolean canAddMethod()
- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.4
- See Also:
canUnrestrictedlyRedefineClasses
@Deprecated(since="15") boolean canUnrestrictedlyRedefineClasses()
redefineClasses(java.util.Map<? extends com.sun.jdi.ReferenceType, byte[]>).- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.4
- See Also:
canPopFrames
boolean canPopFrames()
- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.4
- See Also:
canGetSourceDebugExtension
boolean canGetSourceDebugExtension()
- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.4
- See Also:
canRequestVMDeathEvent
boolean canRequestVMDeathEvent()
VMDeathRequests.- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.4
- See Also:
canGetMethodReturnValues
boolean canGetMethodReturnValues()
MethodExitEvents.- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.6
- See Also:
canGetInstanceInfo
boolean canGetInstanceInfo()
- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.6
- See Also:
canUseSourceNameFilters
boolean canUseSourceNameFilters()
ClassPrepareRequest.addSourceNameFilter(java.lang.String).- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.6
canForceEarlyReturn
boolean canForceEarlyReturn()
- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.6
- See Also:
canBeModified
boolean canBeModified()
VMCannotBeModifiedException is thrown.- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.5
canRequestMonitorEvents
boolean canRequestMonitorEvents()
MonitorContendedEnterRequests. MonitorContendedEnteredRequests. MonitorWaitRequests. MonitorWaitedRequests.- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.6
- See Also:
canGetMonitorFrameInfo
boolean canGetMonitorFrameInfo()
- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.6
- See Also:
canGetClassFileVersion
boolean canGetClassFileVersion()
- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.6
- See Also:
canGetConstantPool
boolean canGetConstantPool()
- Returns:
-
trueif the feature is supported,falseotherwise. - Since:
- 1.6
- See Also:
canGetModuleInfo
default boolean canGetModuleInfo()
- Implementation Requirements:
- The default implementation returns
false. - Returns:
-
trueif the feature is supported,falseotherwise - Since:
- 9
- See Also:
setDefaultStratum
void setDefaultStratum(String stratum)
Location for a discussion of strata). Overrides the per-class default set in the class file. Affects location queries (such as, Location.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. - Since:
- 1.4
getDefaultStratum
String getDefaultStratum()
- Returns:
-
null(meaning that the per-class default -ReferenceType.defaultStratum()- should be used) unless the default stratum has been set withsetDefaultStratum(String). - Since:
- 1.4
- See Also:
instanceCounts
long[] instanceCounts(List<? extends ReferenceType> refTypes)
Not all target virtual machines support this operation. Use canGetInstanceInfo() to determine if the operation is supported.
- Parameters:
-
refTypes- the list ofReferenceTypeobjects for which counts are to be obtained. - Returns:
- an array of
longcontaining 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 - seecanGetInstanceInfo() -
NullPointerException- if the 'refTypes' list is null. - Since:
- 1.6
- See Also:
description
String description()
version(), VirtualMachineManager.majorInterfaceVersion(), and VirtualMachineManager.minorInterfaceVersion()
- Returns:
- the description.
version
String version()
java.version. For obtaining the JDI interface version, use VirtualMachineManager.majorInterfaceVersion() and VirtualMachineManager.minorInterfaceVersion()
- Returns:
- the target VM version.
name
String name()
java.vm.name.- Returns:
- the target VM name.
setDebugTraceMode
void setDebugTraceMode(int traceFlags)
Output is implementation dependent and trace mode may be ignored.
- Parameters:
-
traceFlags- identifies which kinds of tracing to enable.
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/jdk.jdi/com/sun/jdi/VirtualMachine.html