1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 226039

Read the gdbinit file as specified by the user.  It does not specify at the command line as the CDT does it, but instead sources it as a GDB command.  I believe this allows for easier specialization of the launch.
This commit is contained in:
Marc Khouzam 2008-04-10 14:16:51 +00:00
parent 9ffecad0c8
commit 4093756b37
4 changed files with 68 additions and 1 deletions

View file

@ -32,6 +32,7 @@ import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl;
import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl.SessionType;
import org.eclipse.dd.mi.service.CSourceLookup;
import org.eclipse.dd.mi.service.MIBreakpointsManager;
import org.eclipse.dd.mi.service.command.commands.CLISource;
import org.eclipse.dd.mi.service.command.commands.MIBreakInsert;
import org.eclipse.dd.mi.service.command.commands.MICommand;
import org.eclipse.dd.mi.service.command.commands.MIExecContinue;
@ -59,6 +60,38 @@ public class FinalLaunchSequence extends Sequence {
requestMonitor.done();
}},
/*
* Source the gdbinit file specified in the launch
*/
new Step() { @Override
public void execute(final RequestMonitor requestMonitor) {
try {
final String gdbinitFile = fLaunch.getLaunchConfiguration().getAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT,
IMILaunchConfigurationConstants.DEBUGGER_GDB_INIT_DEFAULT );
if (gdbinitFile != null && gdbinitFile.length() > 0) {
fCommandControl.queueCommand(
new CLISource(fCommandControl.getControlDMContext(), gdbinitFile),
new DataRequestMonitor<MIInfo>(getExecutor(), requestMonitor) {
@Override
protected void handleCompleted() {
// If the gdbinitFile is the default, then it may not exist and we
// should not consider this an error.
// If it is not the default, then the user must have specified it and
// we want to warn the user if we can't find it.
if (!gdbinitFile.equals(IMILaunchConfigurationConstants.DEBUGGER_GDB_INIT_DEFAULT )) {
requestMonitor.setStatus(getStatus());
}
requestMonitor.done();
}
});
} else {
requestMonitor.done();
}
} catch (CoreException e) {
requestMonitor.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Cannot get gdbinit option", e)); //$NON-NLS-1$
requestMonitor.done();
}
}},
/*
* Specify the executable file to be debugged.
*/

View file

@ -374,13 +374,19 @@ public class GDBControl extends AbstractMIControl {
protected IStatus run(IProgressMonitor monitor) {
List<String> commandList = new ArrayList<String>();
// The goal here is to keep options to an absolute minimum.
// All configuration should be done in the launch sequence
// to allow for easy overriding.
commandList.add(fGdbPath.toOSString());
commandList.add("--interpreter"); //$NON-NLS-1$
commandList.add("mi"); //$NON-NLS-1$
// Don't read the gdbinit file here. It is read explicitly in
// the LaunchSequence to make it easier to customize.
commandList.add("--nx"); //$NON-NLS-1$
String[] commandLine = commandList.toArray(new String[commandList.size()]);
try {
try {
fProcess = ProcessFactory.getFactory().exec(commandLine);
} catch(IOException e) {
String message = MessageFormat.format("Error while launching command", //$NON-NLS-1$

View file

@ -0,0 +1,27 @@
/*******************************************************************************
* Copyright (c) 2008 Ericsson and others.
* 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:
* Ericsson - Initial API and implementation
*******************************************************************************/
package org.eclipse.dd.mi.service.command.commands;
import org.eclipse.dd.mi.service.command.MIControlDMContext;
import org.eclipse.dd.mi.service.command.output.MIInfo;
/**
*
* source FILE
*
* Source a file of commands
*
*/
public class CLISource extends CLICommand<MIInfo> {
public CLISource(MIControlDMContext ctx, String file) {
super(ctx, "source " + file); //$NON-NLS-1$
}
}

View file

@ -58,6 +58,7 @@ public class BaseTestCase {
attrs.put(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, true);
attrs.put(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN_SYMBOL, ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT);
attrs.put(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, "gdb");
attrs.put(IMILaunchConfigurationConstants.ATTR_GDB_INIT, ".gdbinit");
}
@Before