2009-12-07 45 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