如何制作一个启动Class的Eclipse调试启动器

时间:2009-12-07 02:29:49

标签: java eclipse debugging eclipse-rcp eclipse-jdt

我正在尝试创建一个可以通过编程方式启动的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。

有谁知道如何解决这个问题?干杯!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

为什么需要启动配置的按钮?如果你扩展你提到的扩展点你的启动配置应该出现在eclipse的调试菜单中......不需要一个单独的按钮!?

从这个公寓我会照看包含“ManagementClient”的插件的依赖项。 “NoSuchClassDefException”通常是错误的依赖关系定义的结果(可能依赖关系的顺序是错误的[ui插件之前的核心插件] ......或者你的类完全不在插件中?)。