使用 Java Debug Interface(JDI)调试多线程应用程序
2009-10-10 00:00:00 来源:WEB开发网每个连接实例都有对应的默认参数,启动连接之前需要设置必须的参数,对于 CommandLineLaunch 连接实例需要设置主程序启动目标程序虚拟机实例所需的参数。
启动连接,获取目标程序虚拟机实例
清单 3. 启动连接
/**参数:
* mainArgs为目标程序main函数所在的类
**/
VirtualMachine launchTarget(String mainArgs) {
//findLaunchingConnector:获取连接
LaunchingConnector connector = findLaunchingConnector();
//connectorArguments:设置连接参数
Map arguments = connectorArguments(connector, mainArgs);
try {
return connector.launch(arguments);//启动连接
} catch (IOException exc) {
throw new Error("Unable to launch target VM: " + exc);
} catch (IllegalConnectorArgumentsException exc) {
throw new Error("Internal error: " + exc);
} catch (VMStartException exc) {
throw new Error("Target VM failed to initialize: " + exc.getMessage());
}
}
清单 1 和清单 2 分别获取连接实例和启动所需的变量,通过调用 connector.launch(arguments) 启动连接,实现了分析器和目标程序的绑定。
注册事件
分析器和目标程序之间采用基于事件的模式进行通信。分析器向虚拟机实例注册所关注的事件。事件发生时,虚拟机将相关事件信息放入事件队列中,采用 生产者 - 消费者 的模式与分析器同步。
更多精彩
赞助商链接