簡體   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