- 所有父级接口:
Mirror
- 所有已知的子接口:
PathSearchingVirtualMachine
mirror 表示目标 VM 的复合状态。所有其他镜像都与该接口的一个实例相关联。对所有其他镜像的访问是通过此接口的实例直接或间接实现的。此接口直接支持对全局 VM 属性的访问和对 VM 执行的控制。
此接口的实例由 Connector 的实例创建。例如,AttachingConnector 附加到目标 VM 并返回其虚拟机镜像。连接器通常会通过调用 VirtualMachineManager 的 VirtualMachineManager.createVirtualMachine(Connection) createVirtualMachine(Connection) 方法来创建 VirtualMachine。
请注意,在收到 VMStartEvent 之前,不能保证由启动连接器启动的目标 VM 是稳定的。
如果目标 VM 断开连接并且 VMDisconnectEvent 已经或可以从 EventQueue 读取,则 VirtualMachine 上以 VirtualMachine 作为参数的任何方法都可能抛出 VMDisconnectedException 。
如果目标 VM 内存不足,VirtualMachine 上将 VirtualMachine 作为参数的任何方法都可能抛出 VMOutOfMemoryException 。
- 自从:
- 1.3
-
字段摘要
字段修饰符和类型Field描述static final int启用所有跟踪。static final int为内部事件处理启用跟踪。static final int禁用所有跟踪。static final int为对象引用的内部管理启用跟踪。static final int为从目标 VM 接收到的 JDWP 数据包启用跟踪。static final int为引用类型的内部管理启用跟踪。static final int为发送到目标 VM 的 JDWP 数据包启用跟踪。 -
方法总结
修饰符和类型方法描述返回目标 VM 中的所有 加载类型。default List<ModuleReference>返回所有模块。返回目标 VM 中的活动线程列表。boolean已弃用。基于 JVM TI 的 JDWP 后端永远不会将此功能设置为 true。boolean确定目标 VM 是否为只读 VM。boolean确定目标 VM 是否支持强制方法提前返回。boolean确定目标 VM 是否支持方法字节码的检索。boolean确定目标 VM 是否支持读取类文件的主要版本和次要版本。boolean判断目标VM是否支持获取类的常量池信息。boolean确定目标 VM 是否支持检索线程当前正在等待的监视器。boolean确定目标 VM 是否支持访问类实例、实例计数和引用对象。boolean确定目标 VM 是否支持在MethodExitEvents 中包含返回值。default boolean确定目标 VM 是否支持获取有关模块的信息。boolean确定目标 VM 是否支持获取哪个框架已获取监视器。boolean确定目标 VM 是否支持检索对象的监视器信息。boolean确定目标 VM 是否支持检索线程拥有的监视器。boolean确定目标 VM 是否支持获取源调试扩展。boolean判断目标VM是否支持查询某个方法或字段的综合属性。boolean确定目标 VM 是否支持线程堆栈的弹出帧。boolean确定目标 VM 是否支持任何级别的类重新定义。boolean确定目标 VM 是否支持创建MonitorContendedEnterRequests。boolean确定目标 VM 是否支持创建VMDeathRequests。boolean已弃用。基于 JVM TI 的 JDWP 后端永远不会将此功能设置为 true。boolean确定目标 VM 是否支持按特定实例对象过滤事件。boolean确定目标 VM 是否支持按源名称过滤类准备事件。boolean确定目标 VM 是否支持现场访问观察点。boolean确定目标 VM 是否支持用于字段修改的观察点。classesByName(String className) 返回与给定名称匹配的加载引用类型。返回有关目标 VM 和镜像它的调试器支持的文本信息。voiddispose()使该虚拟机镜像无效。返回此虚拟机的事件队列。返回此虚拟机的事件请求管理器。voidexit(int exitCode) 导致镜像 VM 以给定的错误代码终止。返回此 VM 的默认层。long[]instanceCounts(List<? extends ReferenceType> refTypes) 返回“refTypes”列表中每个 ReferenceType 的实例数。mirrorOf(boolean value) 为给定值创建一个BooleanValue。mirrorOf(byte value) 为给定值创建一个ByteValue。mirrorOf(char value) 为给定值创建一个CharValue。mirrorOf(double value) 为给定值创建一个DoubleValue。mirrorOf(float value) 为给定值创建一个FloatValue。mirrorOf(int value) 为给定值创建一个IntegerValue。mirrorOf(long value) 为给定值创建一个LongValue。mirrorOf(short value) 为给定值创建一个ShortValue。在此虚拟机中创建一个字符串。创建一个VoidValue。name()返回属性java.vm.name报告的目标 VM 的名称。process()如果由LaunchingConnector启动,则返回此虚拟机的Process对象voidredefineClasses(Map<? extends ReferenceType, byte[]> classToBytes) 根据提供的定义重新定义所有给定的类。voidresume()继续执行在此虚拟机中运行的应用程序。voidsetDebugTraceMode(int traceFlags) 跟踪 com.sun.jdi 实现执行的活动。voidsetDefaultStratum(String stratum) 设置此 VM 的默认层(有关层的讨论,请参阅Location)。voidsuspend()暂停在此虚拟机中运行的应用程序的执行。返回没有父线程组的每个线程组。version()返回属性java.version报告的目标 VM 中 Java 运行时环境的版本。在接口 com.sun.jdi.Mirror 中声明的方法
toString, virtualMachine
-
字段详细信息
-
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
返回所有模块。对于目标 VM 中的每个模块,ModuleReference将被放置在返回的列表中。并非所有目标虚拟机都支持此操作。使用
canGetModuleInfo()确定是否支持该操作。- 实现要求:
-
默认实现抛出
UnsupportedOperationException。 - 返回:
ModuleReference对象的列表,每个对象都镜像目标 VM 中的一个模块。- 抛出:
UnsupportedOperationException- 如果目标虚拟机不支持此操作。- 自从:
- 9
-
classesByName
返回与给定名称匹配的加载引用类型。该名称必须是完全限定的(例如,java.lang.String)。对于使用给定名称找到的每个类或接口,返回的列表将包含一个ReferenceType。搜索仅限于加载的类;不会尝试加载给定名称的类。返回的列表将包括至少加载到准备点的引用类型和未定义准备的类型(如数组)。
- 参数:
className- 要搜索的类/接口名称- 返回:
ReferenceType对象的列表,每个对象都使用给定名称镜像目标 VM 中的一种类型。
-
allClasses
List <ReferenceType > allClasses()返回目标 VM 中的所有 加载类型。返回的列表包括所有引用类型,包括
hidden classes or interfaces,至少加载到准备点和未定义准备的类型(如数组)。- 返回:
ReferenceType对象的列表,每个对象都镜像目标 VM 中的一个加载类型。- 参见:
-
redefineClasses
根据提供的定义重新定义所有给定的类。重新定义的类中的方法称为“等效”(对于该方法的旧版本)如果- 除了常量池中的索引外,它们的字节码是相同的,并且
- 引用的常量相等。
Method.isObsolete()在调用这些方法之一时将返回 true。如果需要重置这样的框架,请使用ThreadReference.popFrames(StackFrame)从堆栈中弹出旧的过时方法执行。重新定义方法的新调用将始终调用新版本。这个函数不会导致任何初始化,除非在通常的 JVM 语义下会发生初始化。换句话说,重新定义一个类不会导致其初始化程序运行。预先存在的静态变量的值将保持在调用之前的状态。然而,完全未初始化的(新的)静态变量将被赋予它们的默认值。
如果重新定义的类有实例,那么所有这些实例都将在调用完成时具有由重新定义的类定义的字段。先前存在的字段将保留其先前的值。任何新字段都将具有默认值;没有运行实例初始化程序或构造方法。
线程不需要暂停。
此函数不生成任何事件。
删除重新定义的类中的所有断点。
并非所有目标虚拟机都支持此操作。使用
canRedefineClasses()确定是否支持该操作。使用canAddMethod()判断重定义是否可以添加方法。使用canUnrestrictedlyRedefineClasses()判断重定义是否可以改变schema、删除方法、改变类层次等。- 参数:
classToBytes- 从ReferenceType到字节数组的映射。字节表示新的类定义并且采用 Java 虚拟机类文件格式。- 抛出:
UnsupportedOperationException- 如果目标虚拟机不支持此操作。- 如果
canRedefineClasses()为 false,对该方法的任何调用都将抛出该异常。 - 如果
canAddMethod()为假,尝试添加方法将抛出此异常。 - 如果
canUnrestrictedlyRedefineClasses()为假,尝试 JVM TI 重新定义类 中描述的任何不受支持的类文件更改将引发此异常。
- 如果
NoClassDefFoundError- 如果字节不对应于引用类型(名称不匹配)。VerifyError- 如果“验证者”检测到一个类虽然格式正确,但包含内部不一致或安全问题。ClassFormatError- 如果字节不代表有效类。ClassCircularityError- 如果在初始化类时检测到循环。UnsupportedClassVersionError- 如果 VM 不支持以字节为单位的主要和次要版本号。VMCannotBeModifiedException- 如果 VirtualMachine 是只读的 - 请参阅canBeModified()。- 自从:
- 1.4
- 参见:
-
allThreads
List <ThreadReference > allThreads()返回目标 VM 中的活动线程列表。尚未启动的线程或已终止的线程不包括在列表中。返回的列表包含目标 VM 中每个活动的 平台线程 的
ThreadReference。这包括使用java.lang.ThreadAPI 创建的平台线程和使用 JNI代码 附加到目标 VM 的所有本机线程。如果列表包含目标 VM 中实时 虚拟线程 的元素,则取决于实现。目标 VM 可能不会返回任何对虚拟线程的引用,或者它可能被配置为返回对某些或所有虚拟线程的引用。想要跟踪所有虚拟线程的工具可以启用
ThreadStartRequest和ThreadDeathRequest以在虚拟线程启动和终止时获得通知。- 返回:
-
目标 VM 中线程的
ThreadReference对象列表
-
suspend
void suspend()暂停在此虚拟机中运行的应用程序的执行。当前运行的所有线程都将被挂起。计算虚拟机和单个线程的挂起。在线程再次运行之前,它必须恢复(通过
resume()或ThreadReference.resume())与暂停次数相同的次数。- 抛出:
VMCannotBeModifiedException- 如果虚拟机是只读的- 参见:
-
resume
void resume()继续执行在此虚拟机中运行的应用程序。所有线程都按照ThreadReference.resume()中的记录恢复。- 抛出:
VMCannotBeModifiedException- 如果虚拟机是只读的- 参见:
-
topLevelThreadGroups
List <ThreadGroupReference > topLevelThreadGroups()返回没有父线程组的每个线程组。对于每个顶级线程组,一个ThreadGroupReference被放置在返回的列表中。此命令可用作构建现有线程组的树(或多个树)的第一步。
- 返回:
ThreadGroupReference对象列表,每个顶级线程组一个。
-
eventQueue
EventQueue eventQueue()返回此虚拟机的事件队列。一个虚拟机只有一个EventQueue对象,这个方法每次调用都会返回同一个实例。- 返回:
-
此虚拟机的
EventQueue。 - 抛出:
VMCannotBeModifiedException- 如果 VirtualMachine 是只读的 - 请参阅canBeModified()。
-
eventRequestManager
EventRequestManager eventRequestManager()返回此虚拟机的事件请求管理器。EventRequestManager控制用户可设置的事件,例如断点。一个虚拟机只有一个EventRequestManager对象,这个方法每次调用都会返回同一个实例。- 返回:
-
此虚拟机的
EventRequestManager。 - 抛出:
VMCannotBeModifiedException- 如果 VirtualMachine 是只读的 - 请参阅canBeModified()。
-
mirrorOf
为给定值创建一个BooleanValue。该值可用于设置和比较从该虚拟机中的变量或字段检索的值。- 参数:
value- 为其创建值的boolean- 返回:
-
给定boolean的
BooleanValue。
-
mirrorOf
为给定值创建一个ByteValue。该值可用于设置和比较从该虚拟机中的变量或字段检索的值。- 参数:
value- 为其创建值的字节- 返回:
-
给定字节的
ByteValue。
-
mirrorOf
为给定值创建一个CharValue。该值可用于设置和比较从该虚拟机中的变量或字段检索的值。- 参数:
value- 要为其创建值的字符- 返回:
-
给定字符的
CharValue。
-
mirrorOf
为给定值创建一个ShortValue。该值可用于设置和比较从该虚拟机中的变量或字段检索的值。- 参数:
value- 为其创建值的缩写- 返回:
-
给定短的
ShortValue。
-
mirrorOf
为给定值创建一个IntegerValue。该值可用于设置和比较从该虚拟机中的变量或字段检索的值。- 参数:
value- 要为其创建值的 int- 返回:
-
给定整数的
IntegerValue。
-
mirrorOf
为给定值创建一个LongValue。该值可用于设置和比较从该虚拟机中的变量或字段检索的值。- 参数:
value- 为其创造值的多头- 返回:
-
给定多头的
LongValue。
-
mirrorOf
为给定值创建一个FloatValue。该值可用于设置和比较从该虚拟机中的变量或字段检索的值。- 参数:
value- 为其创建值的浮点数- 返回:
-
给定浮点数的
FloatValue。
-
mirrorOf
为给定值创建一个DoubleValue。该值可用于设置和比较从该虚拟机中的变量或字段检索的值。- 参数:
value- 为其创建值的双精度数- 返回:
-
给定双精度的
DoubleValue。
-
mirrorOf
在此虚拟机中创建一个字符串。创建的字符串可用于设置和比较从该虚拟机中的变量或字段检索的字符串值。- 参数:
value- 要创建的字符串- 返回:
StringReference镜像目标 VM 中新创建的字符串。- 抛出:
VMCannotBeModifiedException- 如果 VirtualMachine 是只读的 - 请参阅canBeModified()。
-
mirrorOfVoid
VoidValue mirrorOfVoid()创建一个VoidValue。当要退出 void 方法时,可以将此值传递给ThreadReference.forceEarlyReturn(com.sun.jdi.Value)。- 返回:
VoidValue。
-
process
Process process()如果由LaunchingConnector启动,则返回此虚拟机的Process对象- 返回:
-
此虚拟机的
Process对象,如果它不是由LaunchingConnector启动的,则为 null。 - 抛出:
VMCannotBeModifiedException- 如果 VirtualMachine 是只读的 - 请参阅canBeModified()。
-
dispose
void dispose()使该虚拟机镜像无效。到目标VM的通信通道关闭,目标VM准备接受来自这个调试器或另一个调试器的另一个后续连接,包括以下任务:- 所有活动请求均被取消。
- 所有被
suspend()或ThreadReference.suspend()暂停的线程都会根据需要多次恢复运行。 - 在通过
ObjectReference.disableCollection()禁用的所有情况下,垃圾收集都会重新启用。
源自此 VirtualMachine 的资源(ObjectReferences、ReferenceTypes 等)将变得无效。
-
exit
void exit(int exitCode) 导致镜像 VM 以给定的错误代码终止。与此 VirtualMachine 关联的所有资源都已释放。如果镜像 VM 是远程的,则与它的通信通道将被关闭。源自此 VirtualMachine 的资源(ObjectReferences、ReferenceTypes 等)将变得无效。在镜像 VM 中运行的线程突然终止。不会抛出线程死亡异常,也不会运行 finally 块。
- 参数:
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否则。
-
canUseInstanceFilters
boolean canUseInstanceFilters()确定目标 VM 是否支持按特定实例对象过滤事件。例如,请参阅BreakpointRequest.addInstanceFilter(com.sun.jdi.ObjectReference)。- 返回:
true如果支持该功能,false否则。
-
canRedefineClasses
boolean canRedefineClasses()确定目标 VM 是否支持任何级别的类重新定义。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.4
- 参见:
-
canAddMethod
已弃用。基于 JVM TI 的 JDWP 后端永远不会将此功能设置为 true。确定目标 VM 是否支持在执行类重定义时添加方法。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.4
- 参见:
-
canUnrestrictedlyRedefineClasses
已弃用。基于 JVM TI 的 JDWP 后端永远不会将此功能设置为 true。确定目标 VM 在执行类重新定义时是否支持更改,否则受redefineClasses(java.util.Map<? extends com.sun.jdi.ReferenceType, byte[]>)限制。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.4
- 参见:
-
canPopFrames
boolean canPopFrames()确定目标 VM 是否支持线程堆栈的弹出帧。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.4
- 参见:
-
canGetSourceDebugExtension
boolean canGetSourceDebugExtension()确定目标 VM 是否支持获取源调试扩展。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.4
- 参见:
-
canRequestVMDeathEvent
boolean canRequestVMDeathEvent()确定目标 VM 是否支持创建VMDeathRequests。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.4
- 参见:
-
canGetMethodReturnValues
boolean canGetMethodReturnValues()确定目标 VM 是否支持在MethodExitEvents 中包含返回值。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.6
- 参见:
-
canGetInstanceInfo
boolean canGetInstanceInfo()确定目标 VM 是否支持访问类实例、实例计数和引用对象。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.6
- 参见:
-
canUseSourceNameFilters
boolean canUseSourceNameFilters()确定目标 VM 是否支持按源名称过滤类准备事件。见ClassPrepareRequest.addSourceNameFilter(java.lang.String)。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.6
-
canForceEarlyReturn
boolean canForceEarlyReturn()确定目标 VM 是否支持强制方法提前返回。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.6
- 参见:
-
canBeModified
boolean canBeModified()确定目标 VM 是否为只读 VM。如果在只读 VM 上调用会修改 VM 状态的方法,则会抛出VMCannotBeModifiedException。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.5
-
canRequestMonitorEvents
boolean canRequestMonitorEvents()确定目标 VM 是否支持创建MonitorContendedEnterRequests。MonitorContendedEnteredRequests。MonitorWaitRequests。MonitorWaitedRequests。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.6
- 参见:
-
canGetMonitorFrameInfo
boolean canGetMonitorFrameInfo()确定目标 VM 是否支持获取哪个框架已获取监视器。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.6
- 参见:
-
canGetClassFileVersion
boolean canGetClassFileVersion()确定目标 VM 是否支持读取类文件的主要版本和次要版本。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.6
- 参见:
-
canGetConstantPool
boolean canGetConstantPool()判断目标VM是否支持获取类的常量池信息。- 返回:
true如果支持该功能,false否则。- 自从:
- 1.6
- 参见:
-
canGetModuleInfo
default boolean canGetModuleInfo()确定目标 VM 是否支持获取有关模块的信息。- 实现要求:
-
默认实现返回
false。 - 返回:
true如果支持该功能,false否则- 自从:
- 9
- 参见:
-
setDefaultStratum
设置此 VM 的默认层(有关层的讨论,请参阅Location)。覆盖类文件中每个类的默认设置。影响位置查询(例如
Location.sourceName())和单步执行中使用的线边界。- 参数:
stratum- 设置为 VM 默认值的层,或者为 null 以使用每个类的默认值。- 抛出:
UnsupportedOperationException- 如果目标虚拟机不支持此操作。- 自从:
- 1.4
-
getDefaultStratum
String getDefaultStratum()返回此 VM 的默认层。- 返回:
null(意味着应该使用每类默认值 -ReferenceType.defaultStratum()-)除非已使用setDefaultStratum(String)设置默认层。- 自从:
- 1.4
- 参见:
-
instanceCounts
返回“refTypes”列表中每个 ReferenceType 的实例数。仅计算出于垃圾收集目的可访问的实例。并非所有目标虚拟机都支持此操作。使用
canGetInstanceInfo()确定是否支持该操作。- 参数:
refTypes- 要获取其计数的ReferenceType对象的列表。- 返回:
long的数组,包含“refTypes”列表中每个元素的一个元素。数组的元素 i 包含“refTypes”列表中位置 i 处 ReferenceType 的目标 VM 中的实例数。如果“refTypes”列表为空,则返回零长度数组。如果 refTypes 中的 ReferenceType 已被垃圾回收,则其实例计数将返回零。- 抛出:
UnsupportedOperationException- 如果目标虚拟机不支持此操作 - 请参阅canGetInstanceInfo()NullPointerException- 如果“refTypes”列表为空。- 自从:
- 1.6
- 参见:
-
description
String description()返回有关目标 VM 和镜像它的调试器支持的文本信息。不保证此信息的特定格式。通常,此字符串包含目标 VM 和调试器接口的版本信息。可通过version()、VirtualMachineManager.majorInterfaceVersion()和VirtualMachineManager.minorInterfaceVersion()获得有关 VM 和 JDI 版本的更精确信息- 返回:
- 说明。
-
version
String version()返回属性java.version报告的目标 VM 中 Java 运行时环境的版本。获取JDI接口版本,使用VirtualMachineManager.majorInterfaceVersion()和VirtualMachineManager.minorInterfaceVersion()- 返回:
- 目标虚拟机版本。
-
name
String name()返回属性java.vm.name报告的目标 VM 的名称。- 返回:
- 目标 VM 名称。
-
setDebugTraceMode
void setDebugTraceMode(int traceFlags) 跟踪 com.sun.jdi 实现执行的活动。所有跟踪信息都输出到 System.err。给定的跟踪标志用于将输出限制为仅包含所需的信息。给定的标志有效,相应的跟踪将继续,直到下一次调用此方法。输出依赖于实现,跟踪模式可能会被忽略。
- 参数:
traceFlags- 标识要启用的跟踪类型。
-