繁体   English   中英

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

[英]Eclipse Plugin Action: Attach Eclipse debugger to a Remote Java Application programmatically

抱歉,这个问题与Eclipse论坛中的帖子重复。 由于Eclipse论坛似乎反应不灵敏,因此我在这里碰碰运气。 我已经实现了这个功能与NetBeans, 这里描述的 ,但现在我需要为Eclipse相同的功能。

在我的开发环境中,我必须调试的远程Java Server经常更改其IP地址(我无法更改该事实)。 因此,我经常必须在Eclipse调试配置中更改该服务器的IP地址,在此我必须更新远程Java应用程序的地址。

我能够以编程方式找到IP地址(可以从属性文件中读取),因此我也希望Eclipse使用该“动态” IP地址,而不必每次地址更改时都将其手动输入到GUI中。 。

第一个问题是:我是否甚至需要编写一个Eclipse插件来对此用例进行建模? 或者我可以使用命令行参数来控制正在运行的Eclipse实例吗? 我真正想要的是,如果我可以从命令行触发Eclipse,将IP地址传递给Eclipse,那么它应该附加调试器,例如以下“ pseudo”命令:

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

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

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

预先感谢您的每一个提示!

我已经找到了这篇很相关的文章 :但这只是一个小提示,我可以使用的类。 但是我宁愿看到一个代码示例,所以我仍然感谢一些帮助。

编辑:

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

您可以使用hosts文件为IP地址分配名称。

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

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

Eclipse将为您记住最后一个值。

最后一个选择:您可以为您的网络设置DNS服务器,并使其解析每个人的IP地址。

我今天提出了同样的问题。 要以编程方式附加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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM