VirtualMachine 镜像的方法。
可以使用几个不同的 Connector 对象之一进行连接。每个连接器封装了一种将调试器与目标 VM 连接的不同方式。
VirtualMachineManager 支持将调试器连接到虚拟机的许多不同场景。下表列出了四个示例。这些示例使用 Sun 实现中的命令行语法。一些 Connector 实现可能需要与下面介绍的处理略有不同。
| 设想 | Description |
|---|---|
| 调试器启动目标 VM(最简单、最常见的场景) | 调试器调用默认连接器的 LaunchingConnector.launch(java.util.Map) 方法,通过 defaultConnector() 获得。启动目标 VM,并在该 VM 和调试器之间建立连接。 VirtualMachine 镜像被返回。或者,为了获得更多控制
|
| 调试器附加到以前运行的 VM |
|
| 目标 VM 附加到先前运行的调试器 |
|
| 目标 VM 启动调试器(有时称为“即时”调试) |
|
连接器是在启动时创建的。也就是说,它们是在第一次调用 Bootstrap.virtualMachineManager() 时创建的。可以通过调用 allConnectors 方法从 VirtualMachineManager 获取在启动时创建的所有连接器的列表。
如果连接器安装在平台上,则在启动时创建连接器。此外,连接器由 VirtualMachineManager 自动创建,以封装平台上安装的任何 TransportService 实现。此处描述了这两种创建连接器的机制。
如果连接器安装在对 Connector 类型的定义类加载器可见的 jar 文件中,并且该 jar 文件在资源目录 META-INF/services 中包含名为 Connector 的提供程序配置文件,并且提供程序配置文件列出连接器实现的全限定类名。连接器是实现 Connector 接口的类。更恰当地说,该类实现了一种特定的连接器类型,即 AttachingConnector 、 ListeningConnector 或 LaunchingConnector 。提供者配置文件的格式是每行一个完全限定的类名。每个类周围的空格和制表符以及空行都将被忽略。注释字符是 '#' (0x23 ),在每一行中第一个注释字符之后的所有字符都将被忽略。该文件必须以 UTF-8 编码。
在启动时,VirtualMachineManager 尝试加载和实例化(使用无参数构造方法)提供者配置文件中列出的每个类。捕获并忽略加载或创建连接器时抛出的异常。换句话说,尽管有错误,启动过程仍会继续。
除了平台上安装的连接器之外,VirtualMachineManager 还将创建连接器来封装平台上安装的任何TransportService 实现。如果 TransportService 安装在 TransportService 类型的定义类加载器可见的 jar 文件中,并且该 jar 文件在资源目录 META-INF/services 中包含名为 TransportService 的提供程序配置文件,并且提供程序配置文件列表TransportService 实现的全限定类名。 TransportService 是 TransportService 的具体子类。提供者配置文件的格式与连接器的提供者配置文件相同,只是列出的每个类都必须是实现 TransportService 接口的类的完全限定类名。
对于平台上安装的每个 TransportService,VirtualMachineManager 都会创建相应的 AttachingConnector 和 ListeningConnector 。创建这些连接器是为了封装一个 Transport ,而后者又封装了 TransportService。 AttachingConnector 将根据与字符串 Attach 连接的传输服务名称命名。例如,如果传输服务 name() 方法返回 telepathic,则 AttachingConnector 将被命名为 telepathicAttach。同样,ListeningConnector 将使用标记在传输服务名称上的字符串 Listen 命名。 AttachingConnector 和 ListeningConnector 的 description() 方法将委托给底层传输服务的 description() 方法。 AttachingConnector 和 ListeningConnector 都有两个 Connector Arguments 。名为 address 的 StringArgument 是连接器参数,用于指定要附加或监听的地址。名为 timeout 的 IntegerArgument 是连接器参数,用于指定附加或接受时的超时时间。超时连接器可能会被忽略,具体取决于传输服务是否支持附加超时或接受超时。
虚拟机管理器的初始化将失败,也就是说,如果虚拟机管理器无法创建任何连接器,Bootstrap.virtualMachineManager() 将引发错误。
- 自从:
- 1.3
-
方法总结
修饰符和类型方法描述返回所有已知Connector对象的列表。返回已知AttachingConnector对象的列表。列出连接到调试器的所有目标 VM。createVirtualMachine(Connection connection) 创建一个新的虚拟机。createVirtualMachine(Connection connection, Process process) 为目标 VM 创建虚拟机镜像。标识默认连接器。返回已知LaunchingConnector对象的列表。返回已知ListeningConnector对象的列表。int返回 JDI 接口的主版本号。int返回 JDI 接口的次要版本号。
-
方法详情
-
defaultConnector
LaunchingConnector defaultConnector()标识默认连接器。当不需要选择具有特定特性的连接器时,应将此连接器用作发射连接器。- 返回:
-
默认
LaunchingConnector
-
launchingConnectors
List <LaunchingConnector > launchingConnectors()返回已知LaunchingConnector对象的列表。任何返回的对象都可用于启动新的目标 VM 并立即为其创建一个VirtualMachine镜像。请注意,在收到VMStartEvent之前,不能保证由启动连接器启动的目标 VM 是稳定的。- 返回:
LaunchingConnector对象列表。
-
attachingConnectors
List <AttachingConnector > attachingConnectors()返回已知AttachingConnector对象的列表。任何返回的对象都可用于附加到现有目标 VM 并为其创建VirtualMachine镜像。- 返回:
AttachingConnector对象列表。
-
listeningConnectors
List <ListeningConnector > listeningConnectors()返回已知ListeningConnector对象的列表。任何返回的对象都可用于监听目标 VM 发起的连接并为其创建VirtualMachine镜像。- 返回:
ListeningConnector对象列表。
-
allConnectors
返回所有已知Connector对象的列表。- 返回:
Connector对象列表。
-
connectedVirtualMachines
List <VirtualMachine > connectedVirtualMachines()列出连接到调试器的所有目标 VM。该列表包括VirtualMachine个实例,用于启动连接的任何目标 VM 以及此管理器已启动连接的任何目标 VM。目标 VM 将保留在此list中,直到 VM 断开连接。VMDisconnectEvent在 VM 从列表中删除后放入事件队列。- 返回:
VirtualMachine对象的列表,每个对象都镜像一个目标 VM。
-
majorInterfaceVersion
int majorInterfaceVersion()返回 JDI 接口的主版本号。请参阅VirtualMachine.version()目标 VM 版本和信息以及VirtualMachine.description()更多版本信息。- 返回:
- 整数主要版本号。
-
minorInterfaceVersion
int minorInterfaceVersion()返回 JDI 接口的次要版本号。请参阅VirtualMachine.version()目标 VM 版本和信息以及VirtualMachine.description()更多版本信息。- 返回:
- 整数次要版本号
-
createVirtualMachine
为目标 VM 创建虚拟机镜像。为已存在
Connection的目标 VM 创建虚拟机镜像。当Connector建立连接并成功与目标 VM 握手时,将创建一个连接。然后连接器可以使用此方法创建虚拟机镜像来表示目标 VM 的复合状态。process参数指定目标 VM 的Process对象。它可以指定为null。如果目标 VM 由LaunchingConnector启动,则应指定process参数,否则在创建的虚拟机上调用VirtualMachine.process()将返回null。存在此方法以便连接器可以在与目标 VM 建立连接时创建虚拟机镜像。只有创建新连接器实现的开发人员才需要直接使用此方法。
- 参数:
connection- 与目标 VM 的打开连接。process- 如果启动,目标 VM 的Process对象。null如果未启动。- 返回:
- 代表目标 VM 的新虚拟机。
- 抛出:
IOException- 如果发生 I/O 错误IllegalStateException- 如果连接未打开- 自从:
- 1.5
- 参见:
-
createVirtualMachine
创建一个新的虚拟机。这种便捷方法的工作方式就像调用
createVirtualMachine(Connection, Process)方法并将null指定为process参数一样。存在此方法以便连接器可以在与目标 VM 建立连接时创建虚拟机镜像。只有创建新连接器实现的开发人员才需要直接使用此方法。
- 返回:
- 新的虚拟机
- 抛出:
IOException- 如果发生 I/O 错误IllegalStateException- 如果连接未打开- 自从:
- 1.5
-