使用cdt eclipse时向gdb添加一个新命令

时间:2011-09-07 12:43:47

标签: eclipse-plugin gdb eclipse-cdt

美好的一天, 我写信给你是因为我试图按照你的指示[这里:http://wiki.eclipse.org/CDT/cdt-debug-dsf-gdb-extensibility]在使用cdt eclipse时向gdb添加一个新命令。 我似乎根本不工作。我将print语句放在所有扩展类的所有方法中。没有打印任何内容,这表明这些方法都没有被调用。以下是我的代码。我错过了什么? (从那以后我没有达到实际实施新服务工厂的目的

plugin.xml中:

<plugin>
  <extension
         point="org.eclipse.debug.core.launchDelegates">
      <launchDelegate
            delegate="tracerdubug.MyTracerLaunchDelegate"
            id="TracerDubug.MyTracerLaunchDelegate"
            modes="debug, run">
      </launchDelegate>
   </extension>
</plugin>
TracerRunControl:
public class TracerRunControl extends GDBRunControl_7_0 {

    public TracerRunControl(DsfSession session) {
        super(session);
        System.out.println("TracerRunControl");
    }

}

// ############################################# ###################

public class MyTracerLaunchDelegate extends GdbLaunchDelegate implements ILaunchConfigurationDelegate2{

    public MyTracerLaunchDelegate() {
        super();
        System.out.println("MyTracerLaunchDelegate::ctr()");
    }


    @Override
    public void launch( ILaunchConfiguration config, String mode, ILaunch launch, IProgressMonitor monitor ) throws CoreException {
        System.out.println("MyTracerLaunchDelegate::launch()");      
super.launch(config, mode, launch, monitor);     
    }


    @Override
    protected IDsfDebugServicesFactory newServiceFactory(String version) {
        System.out.println("MyTracerLaunchDelegate");
        return new TracerDebugServicesFactory(version);
    }
}

// ############################################# ###################

public class TracerDebugServicesFactory extends GdbDebugServicesFactory {

    public TracerDebugServicesFactory(String version) {
        super(version);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected ICommandControl createCommandControl(DsfSession session, ILaunchConfiguration config) {
        GDBControl_7_0 g = new GDBControl_7_0(session,config);
        System.out.println("TracerDebugServicesFactory::createCommandControl");
        return g;
    }

    @Override
    protected IRunControl createRunControlService(DsfSession session) {
        System.out.println("TracerDebugServicesFactory::createProcessesService");
        return new TracerRunControl(session);  
    }

    @Override
    protected IProcesses createProcessesService(DsfSession session) {
        System.out.println("TracerDebugServicesFactory::createProcessesService");
       return new GDBProcesses_7_0(session);
    }
}

谢谢, 晒

1 个答案:

答案 0 :(得分:0)

我有同样的问题,并从另一个论坛得到答案。您必须添加更多信息和更多扩展程序:

<extension
point="org.eclipse.debug.core.launchDelegates">
      <launchDelegate

    delegate="tracerdubug.MyTracerLaunchDelegate"
             delegate="Tracerdubug.MyTracerLaunchDelegate"
            delegateDescription="Your description"
            id="org.eclipse.cdt.dsf.gdb.launch.localCLaunch"
            modes="debug"
            name="My GDB Launch Delegate"
            sourceLocatorId="org.eclipse.cdt.debug.core.sourceLocator"
            sourcePathComputerId="org.eclipse.cdt.debug.core.sourcePathComputer"
            type="org.eclipse.cdt.launch.applicationLaunchType">
      </launchDelegate>
   </extension>
   <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages">
            <launchConfigurationTypeImage
            icon="icons/img.gif"
            configTypeID="Tracerdubug.MyTracerLaunchDelegate"
            id="Tracerdubug.TabGroups.launcher.Image">
        </launchConfigurationTypeImage>
    </extension>
    <extension point="org.eclipse.debug.ui.launchConfigurationTabGroups">
        <launchConfigurationTabGroup
            type="Tracerdubug.MyTracerLaunchDelegate"
            class="Tracerdubug.TabGroups.TabGroupTest"
            id="Tracerdubug.TabGroups.TabGroupTest">
        </launchConfigurationTabGroup>
     </extension>

你需要一个新的类= Tracerdubug.TabGroups.TabGroupTest:

package Tracerdubug.TabGroups;

import org.eclipse.cdt.dsf.gdb.internal.ui.launching.CDebuggerTab;
import org.eclipse.cdt.dsf.gdb.internal.ui.launching.CMainAttachTab;
import org.eclipse.cdt.dsf.gdb.internal.ui.launching.AttachCDebuggerTab;
import org.eclipse.cdt.launch.ui.CArgumentsTab;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;
import org.eclipse.debug.ui.CommonTab;
import org.eclipse.debug.ui.EnvironmentTab;
import org.eclipse.debug.ui.ILaunchConfigurationDialog;
import org.eclipse.debug.ui.ILaunchConfigurationTab;
import org.eclipse.debug.ui.sourcelookup.SourceLookupTab;
public class TabGroupTest extends AbstractLaunchConfigurationTabGroup {

    // Create an array of tabs to be displayed in the debug dialog
    public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
        ILaunchConfigurationTab[] tabs = 
            new ILaunchConfigurationTab[] {,
                new CMainAttachTab(),
                new CArgumentsTab(),
                new EnvironmentTab(),
                new SourceLookupTab(),
                new CommonTab(),
            };
        setTabs(tabs);
    }
}

您也可以创建自己的标签,请参阅:http://www.eclipse.org/articles/Article-Launch-Framework/launch.html

我的命令工厂已加载,我现在正在学习如何使用现有服务发送命令......