2011-03-18 26 views
0

對不起,這個問題是Eclipse論壇內部的this post的重複。由於Eclipse論壇似乎不太敏感,我在這裏嘗試我的運氣。我已經使用NetBeans實現了此功能,as described here,但現在我需要Eclipse的相同功能。Eclipse插件操作:以編程方式將Eclipse調試器附加到遠程Java應用程序

在我的開發環境中,我必須經常調試的遠程Java服務器會更改其IP地址(我無法更改該事實)。所以我經常必須在Eclipse調試配置中更改該服務器的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調試器,也許一些文檔/示例/教程如何使用它?最重要的是一個代碼片段,它顯示瞭如何在Eclipse插件中附加Eclipse Debugger。

在此先感謝您的每一個提示!

我已經找到this quite related post: 但它只是提供了一個小提示,我可以使用哪些類。但我寧願看到一個代碼示例,所以我仍然感謝一些幫助。

編輯:

正如我已經打算寫一個更大的Eclipse的插件,套房與幾個功能對我的日常工作(我想學習發展總體Eclipse插件),我不想通過例如解決這個問題主機文件(雖然這是一個非常好的和簡單的方法)。正如我所問,我想從Eclipse插件中附加調試器。

+1

如何增加對服務器系統的主機文件中的條目?以編程方式更改比編寫Eclipse插件要簡單得多。 AFAIK沒有默認的方式來通過當前版本的命令行將某些東西傳遞給正在運行的eclipse實例。但是最近關閉並驗證了[https://bugs.eclipse.org/bugs/show_bug.cgi?id=4922](功能請求)。也許這有助於如果你想下去插件路線:) – 2011-03-18 16:57:41

回答

1

您可以使用hosts file爲IP地址分配一個名稱。

這樣,您始終可以使用相同的啓動配置。

另一種選擇是在啓動時使用變量。打開啓動配置對話框,點擊「VM Arguments」下面的「Variables ...」按鈕並選擇「string_prompt」。

Eclipse會記住你最後一個值。

最後一個選項:您可以爲您的網絡設置一個DNS服務器,並使其解析每個人的IP地址。

+0

謝謝。但是:1)不是一種選擇。太容易了;)我實際上想要一個真正的插件。看我的編輯。 2)無法發現啓動配置如何與遠程調試配置相關聯? 3)沒有選擇。 – ifischer 2011-03-18 17:23:08

+0

遠程調試配置只是一個具有一些特殊選項的啓動配置。您可以通過在「調試配置...」對話框中向左滾動樹來找到它們。 – 2011-03-20 11:36:14

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; 
}