/*******************************************************************************
* Copyright (c) 2015 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.debug.core;
import org.eclipse.cdt.dsf.debug.service.IDsfDebugServicesFactory;
import org.eclipse.cdt.dsf.debug.sourcelookup.DsfSourceLookupDirector;
import org.eclipse.cdt.dsf.debug.sourcelookup.DsfSourceLookupParticipant;
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunchDelegate;
import org.eclipse.cdt.dsf.gdb.launching.LaunchUtils;
import org.eclipse.cdt.dsf.service.DsfSession;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.model.ISourceLocator;
import org.eclipse.debug.core.sourcelookup.ISourceLookupParticipant;
import melnorme.lang.ide.debug.core.services.LangDebugServicesExtensions;
public class GdbLaunchDelegateExtension extends GdbLaunchDelegate {
@Override
public ILaunch getLaunch(ILaunchConfiguration configuration, String mode) throws CoreException {
setDefaultProcessFactory(configuration); // Reset process factory to what GdbLaunch expected
ILaunch launch = super.getLaunch(configuration, mode);
// workaround for DLTK bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=419273
launch.setAttribute("org.eclipse.dltk.debug.debugConsole", "false");
return launch;
}
@Override
protected ISourceLocator getSourceLocator(ILaunchConfiguration configuration, DsfSession session)
throws CoreException {
return super.getSourceLocator(configuration, session);
}
@Override
protected IPath checkBinaryDetails(ILaunchConfiguration config) throws CoreException {
// Now verify we know the program to debug.
IPath exePath = LaunchUtils.verifyProgramPath(config, null);
// Finally, make sure the program is a proper binary.
// BM: this code is disabled because without a project the binary verifier defaults to ELF on any platform
//LaunchUtils.verifyBinary(config, exePath);
return exePath;
}
@Override
protected DsfSourceLookupDirector createDsfSourceLocator(ILaunchConfiguration lc, DsfSession session)
throws CoreException {
DsfSourceLookupDirector sourceLookupDirector = createSourceLookupDirector(lc, session);
sourceLookupDirector.addParticipants(
new ISourceLookupParticipant[]{ new DsfSourceLookupParticipant(session) } );
return sourceLookupDirector;
}
@SuppressWarnings("unused")
protected LangSourceLookupDirector createSourceLookupDirector(ILaunchConfiguration lc, DsfSession session) {
return new LangSourceLookupDirector(session);
}
@Override
protected IDsfDebugServicesFactory newServiceFactory(ILaunchConfiguration config, String version) {
IDsfDebugServicesFactory parentServiceFactory = super.newServiceFactory(config, version);
return createServicesExtensions(parentServiceFactory);
}
protected LangDebugServicesExtensions createServicesExtensions(IDsfDebugServicesFactory parentServiceFactory) {
return new LangDebugServicesExtensions(parentServiceFactory);
}
}