2009-12-07 89 views
3

我想使Eclipse啓動配置,我可以以編程方式啓動,如果你喜歡建立一個自定義調試器。如何使Eclipse調試啓動器啓動一個類

我已經有org.eclipse.debug.core.launchConfigurationTypes擴展名,以及.core.launchDelegates,.ui.launchConfigurationTabGroups.core.sourcePathComputers擴展名。

我有一個按鈕,執行以下代碼:

ILaunchManager mgr = DebugPlugin.getDefault().getLaunchManager(); 
ILaunchConfigurationType lct = mgr.getLaunchConfigurationType(IOpcodeConstants.LAUNCH_CFG_TYPE); 
ILaunchConfiguration[] lcs = mgr.getLaunchConfigurations(lct); 

for (int i = 0; i < lcs.length; ++i) { 
    if (lcs[i].getName().equals("Opcode")) { 
     lcs[i].delete(); 
     break; 
    } 
} 

ILaunchConfigurationWorkingCopy wc = lct.newInstance(null, "Opcode"); 

Set<String> modes = new HashSet<String>(); 
modes.add(ILaunchManager.DEBUG_MODE); 
wc.setModes(modes); 
wc.setPreferredLaunchDelegate(modes, "nz.net.fantail.studio.OpcodeLaunchDelegate"); 

ILaunchConfiguration lc = wc.doSave(); 
lc.launch(ILaunchManager.DEBUG_MODE, null); 

我推出委託具有下面的代碼:

@Override 
public void launch(ILaunchConfiguration configuration, String mode, 
     ILaunch launch, IProgressMonitor monitor) throws CoreException { 

    ManagementClient client = new ManagementClient("localhost", 6961); 

    if (mode.equals(ILaunchManager.DEBUG_MODE)) { 
     IDebugTarget target = new OpcodeDebugTarget(launch, client); 
     launch.addDebugTarget(target); 
    } 
} 

一切工作完全正常,直到得到嘗試加載ManagementClient類並拋出一個NoSuchClassDefException。我懷疑這是因爲它在與實際應用程序不同的環境中啓動,因此它的類路徑中沒有帶類的.jar。

有誰知道如何解決這個問題?乾杯!

回答

1

它找不到什麼類,ManagementClient或其他東西?也許在你的啓動配置中,你需要自己設置目標類路徑。

// customize the classpath 
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH, false); 
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH, classPathList); 

這裏有一些其他的設置,可能是有用的:

wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, 
    projectName); 
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, 
    targetMainClass); 
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, 
    programArgs); 
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, jvmArgs); 
+0

嘿,謝謝!它是無法找到的ManagementClient類。雖然我似乎沒有IJavaLaunchConfigurationConstants,但我會盡快查看,可能只是沒有在源路徑中插入它。乾杯! – 2009-12-07 20:54:05

0

爲什麼你需要一個啓動配置中的按鈕?如果你擴展了你提到的擴展點,你的啓動配置應該出現在eclipse的調試菜單中......不需要單獨的按鈕!

Appart從這裏我會照顧包含「ManagementClient」的插件的依賴關係。 「NoSuchClassDefException」通常是錯誤的依賴關係定義的結果(也許依賴關係的順序是錯誤的[在ui插件之前的核心插件] ...或者你的類完全不在插件中)。

+0

我正在使用一個單獨的按鈕,因爲我在這個特定的用戶界面中實際上並沒有或想要一個菜單​​或工具欄。 :-)包含ManagementClient的插件本身是可以的,但如果我從應用程序內部調用它,它工作正常 - 只有在啓動委託失敗時纔會調用該插件。 – 2009-12-07 20:52:41