Eclipse插件操作:以编程方式将Eclipse调试器附加到远程Java应用程序

时间:2011-03-18 16:48:27

标签: eclipse eclipse-plugin

很抱歉,这个问题与Eclipse论坛中的this post重复。由于Eclipse论坛似乎不是很敏感,我在这里试试运气。我已经使用NetBeans as described here实现了此功能,但现在我需要Eclipse的相同功能。

在我的开发环境中,我必须调试的远程Java Server经常更改其IP地址(我无法改变这一事实)。所以我经常需要在Eclipse Debug Configuration中更改该服务器的IP地址,我必须更新远程Java应用程序的地址。

我能够以编程方式找到IP地址(可以从属性文件中读取),所以我也希望Eclipse使用那个“动态”IP地址,而不必每次都手动输入到GUI中地址变了。

第一个问题是:我是否甚至需要编写一个Eclipse插件来模拟这个用例?或者我可以使用命令行参数来控制正在运行的Eclipse实例吗?我真正想要的是,如果我可以从命令行触发Eclipse,将IP地址传递给Eclipse,而不是附加调试器,就像下面的“伪”命令一样:

eclipse --debugger.attach.remote;address=192.168.178.111:9009

这样我可以触发Eclipse从外部程序附加它的调试器,以IP作为参数(这是我已经用NetBeans实现的)。

第二个问题:如果我必须为此编写一个插件(它应该只提供一个简单的按钮,它会触发在属性文件中查找IP,然后请求Eclipse将其调试器附加到此IP),怎么能我开始?您能否建议我应该访问的Eclipse模块来控制Eclipse Debugger,也许还有一些文档/示例/教程如何使用它?什么是非常棒的将是一个代码片段,它显示了如何在Eclipse插件中附加Eclipse Debugger。

提前感谢每一个提示!

我已找到this quite related post: 但它只是提供了一个小提示,我可以使用哪些类。但我宁愿看一个代码示例,所以我仍然感谢一些帮助。

修改

由于我已经计划为我的日常工作编写一个具有多种功能的更大的Eclipse-Plugin-Suite(我想学习一般的Eclipse插件开发),我不想通过例如解决这个问题来解决这个问题。 hosts文件(虽然这是一个非常好的简单方法)。正如我所问,我想在Eclipse插件中附加调试器。

2 个答案:

答案 0 :(得分:1)

您可以使用hosts file为IP地址指定名称。

这样,您始终可以使用相同的启动配置。

另一个选择是在启动时使用变量。打开启动配置对话框,单击“VM Arguments”下面的“Variables ...”按钮,然后选择“string_prompt”。

Eclipse会记住你的最后一个值。

上一个选项:您可以为您的网络设置DNS服务器,并使其解析所有人的IP地址。

答案 1 :(得分:0)

我今天提出了同样的问题。要以编程方式附加Eclipse的调试器,您可以以编程方式创建随后启动的启动配置。工作空间需要包含一个项目,该项目包含要调试的应用程序的源代码。

ILaunchConfigurationWorkingCopy remoteDebugLaunchConfig = createRemoteDebugLaunchConfiguration("ProjectNameThatHasTheSourceCode", "8000");
DebugUITools.launch(remoteDebugLaunchConfig, ILaunchManager.DEBUG_MODE);

方法createRemoteDebugConfiguration创建远程调试启动配置:

private ILaunchConfigurationWorkingCopy createRemoteDebugLaunchConfiguration(final String projectName, final String port) throws CoreException {
    ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
    ILaunchConfigurationType type = manager
            .getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_REMOTE_JAVA_APPLICATION);

    final ILaunchConfigurationWorkingCopy remoteDebugConfig = type.newInstance(null, "remote debug");

    // Set project
    remoteDebugConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, projectName);

    // Set JVM debugger connection parameters
    Map<String, String> connectionParameters = new HashMap<String, String>();
    connectionParameters.put("hostname", "localhost");
    connectionParameters.put("port", port);
    remoteDebugConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CONNECT_MAP, connectionParameters);
    remoteDebugConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_CONNECTOR,
            "org.eclipse.jdt.launching.socketAttachConnector");
    return remoteDebugConfig;
}