mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +02:00
Revert "Bug 344890 - [remote] Cannot start a new process on a remote target with extended-remote"
This reverts commit 6f37c7a914
.
This commit is contained in:
parent
d55bca53a5
commit
629232eae1
15 changed files with 18 additions and 620 deletions
|
@ -1,22 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 Mentor Graphics 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:
|
|
||||||
* Mentor Graphics - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
package org.eclipse.cdt.debug.core.model;
|
|
||||||
|
|
||||||
import org.eclipse.debug.core.commands.IDebugCommandHandler;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Command handler for the "Debug New Executable" command.
|
|
||||||
*
|
|
||||||
* @since 7.3
|
|
||||||
*/
|
|
||||||
public interface IDebugNewExecutableHandler extends IDebugCommandHandler {
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 949 B |
|
@ -242,9 +242,3 @@ OpenNewView.name = Open New View
|
||||||
|
|
||||||
# Disassembly Ruler Column extension point
|
# Disassembly Ruler Column extension point
|
||||||
extPoint.disassemblyRulerColumn=Disassembly Ruler Column
|
extPoint.disassemblyRulerColumn=Disassembly Ruler Column
|
||||||
|
|
||||||
# Debug New Executable Command
|
|
||||||
DebugNewExecutable.name=Debug New Executable
|
|
||||||
DebugNewExecutable.description=Debug a new executable
|
|
||||||
DebugNewExecutable.label=Debug New Executable...
|
|
||||||
DebugNewExecutable.tooltip=Debug a new executable
|
|
||||||
|
|
|
@ -2012,12 +2012,7 @@
|
||||||
id="org.eclipse.cdt.debug.ui.command.connect"
|
id="org.eclipse.cdt.debug.ui.command.connect"
|
||||||
name="%Connect.name">
|
name="%Connect.name">
|
||||||
</command>
|
</command>
|
||||||
<command
|
|
||||||
categoryId="org.eclipse.cdt.debug.ui.category.debugViewLayout"
|
|
||||||
description="%DebugNewExecutable.description"
|
|
||||||
id="org.eclipse.cdt.debug.ui.command.debugNewExecutable"
|
|
||||||
name="%DebugNewExecutable.name">
|
|
||||||
</command>
|
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
point="org.eclipse.ui.handlers">
|
point="org.eclipse.ui.handlers">
|
||||||
|
@ -2084,10 +2079,6 @@
|
||||||
class="org.eclipse.cdt.debug.internal.ui.commands.ConnectCommandHandler"
|
class="org.eclipse.cdt.debug.internal.ui.commands.ConnectCommandHandler"
|
||||||
commandId="org.eclipse.cdt.debug.ui.command.connect">
|
commandId="org.eclipse.cdt.debug.ui.command.connect">
|
||||||
</handler>
|
</handler>
|
||||||
<handler
|
|
||||||
class="org.eclipse.cdt.debug.internal.ui.commands.DebugNewExecutableHandler"
|
|
||||||
commandId="org.eclipse.cdt.debug.ui.command.debugNewExecutable">
|
|
||||||
</handler>
|
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
point="org.eclipse.core.expressions.definitions">
|
point="org.eclipse.core.expressions.definitions">
|
||||||
|
@ -2529,28 +2520,6 @@
|
||||||
</visibleWhen>
|
</visibleWhen>
|
||||||
</command>
|
</command>
|
||||||
</menuContribution>
|
</menuContribution>
|
||||||
<!--
|
|
||||||
<menuContribution
|
|
||||||
locationURI="toolbar:org.eclipse.debug.ui.DebugView?before=stepGroup">
|
|
||||||
<command
|
|
||||||
commandId="org.eclipse.cdt.debug.ui.command.debugNewExecutable"
|
|
||||||
icon="icons/obj16/new_exec.gif"
|
|
||||||
label="%DebugNewExecutable.label"
|
|
||||||
style="push"
|
|
||||||
tooltip="%DebugNewExecutable.tooltip">
|
|
||||||
</command>
|
|
||||||
</menuContribution>
|
|
||||||
-->
|
|
||||||
<menuContribution
|
|
||||||
locationURI="popup:org.eclipse.debug.ui.DebugView?before=emptyLaunchGroup">
|
|
||||||
<command
|
|
||||||
commandId="org.eclipse.cdt.debug.ui.command.debugNewExecutable"
|
|
||||||
icon="icons/obj16/new_exec.gif"
|
|
||||||
label="%DebugNewExecutable.label"
|
|
||||||
style="push"
|
|
||||||
tooltip="%DebugNewExecutable.tooltip">
|
|
||||||
</command>
|
|
||||||
</menuContribution>
|
|
||||||
|
|
||||||
<!-- Connect contributions to debug view menu, toolbar menu -->
|
<!-- Connect contributions to debug view menu, toolbar menu -->
|
||||||
<menuContribution
|
<menuContribution
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 Mentor Graphics 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:
|
|
||||||
* Mentor Graphics - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
package org.eclipse.cdt.debug.internal.ui.commands;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.core.model.IDebugNewExecutableHandler;
|
|
||||||
import org.eclipse.debug.ui.actions.DebugCommandHandler;
|
|
||||||
|
|
||||||
public class DebugNewExecutableHandler extends DebugCommandHandler {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Class<?> getCommandType() {
|
|
||||||
return IDebugNewExecutableHandler.class;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -19,7 +19,6 @@ import java.util.WeakHashMap;
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.core.model.ICBreakpoint;
|
import org.eclipse.cdt.debug.core.model.ICBreakpoint;
|
||||||
import org.eclipse.cdt.debug.core.model.IConnectHandler;
|
import org.eclipse.cdt.debug.core.model.IConnectHandler;
|
||||||
import org.eclipse.cdt.debug.core.model.IDebugNewExecutableHandler;
|
|
||||||
import org.eclipse.cdt.debug.core.model.IResumeWithoutSignalHandler;
|
import org.eclipse.cdt.debug.core.model.IResumeWithoutSignalHandler;
|
||||||
import org.eclipse.cdt.debug.core.model.IReverseResumeHandler;
|
import org.eclipse.cdt.debug.core.model.IReverseResumeHandler;
|
||||||
import org.eclipse.cdt.debug.core.model.IReverseStepIntoHandler;
|
import org.eclipse.cdt.debug.core.model.IReverseStepIntoHandler;
|
||||||
|
@ -50,7 +49,6 @@ import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbDisconnectCommand;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbRestartCommand;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbRestartCommand;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbSteppingModeTarget;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbSteppingModeTarget;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.commands.GdbConnectCommand;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.commands.GdbConnectCommand;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.commands.GdbDebugNewExecutableCommand;
|
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.commands.GdbResumeWithoutSignalCommand;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.commands.GdbResumeWithoutSignalCommand;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.commands.GdbReverseResumeCommand;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.commands.GdbReverseResumeCommand;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.commands.GdbReverseStepIntoCommand;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.commands.GdbReverseStepIntoCommand;
|
||||||
|
@ -116,7 +114,6 @@ public class GdbAdapterFactory
|
||||||
final GdbResumeWithoutSignalCommand fResumeWithoutSignalCommand;
|
final GdbResumeWithoutSignalCommand fResumeWithoutSignalCommand;
|
||||||
final GdbRestartCommand fRestartCommand;
|
final GdbRestartCommand fRestartCommand;
|
||||||
final DsfTerminateCommand fTerminateCommand;
|
final DsfTerminateCommand fTerminateCommand;
|
||||||
final GdbDebugNewExecutableCommand fDebugNewExecutableCommand;
|
|
||||||
final GdbConnectCommand fConnectCommand;
|
final GdbConnectCommand fConnectCommand;
|
||||||
final GdbDisconnectCommand fDisconnectCommand;
|
final GdbDisconnectCommand fDisconnectCommand;
|
||||||
final IDebugModelProvider fDebugModelProvider;
|
final IDebugModelProvider fDebugModelProvider;
|
||||||
|
@ -165,7 +162,6 @@ public class GdbAdapterFactory
|
||||||
fResumeWithoutSignalCommand = new GdbResumeWithoutSignalCommand(session);
|
fResumeWithoutSignalCommand = new GdbResumeWithoutSignalCommand(session);
|
||||||
fRestartCommand = new GdbRestartCommand(session, fLaunch);
|
fRestartCommand = new GdbRestartCommand(session, fLaunch);
|
||||||
fTerminateCommand = new DsfTerminateCommand(session);
|
fTerminateCommand = new DsfTerminateCommand(session);
|
||||||
fDebugNewExecutableCommand = new GdbDebugNewExecutableCommand(session, fLaunch);
|
|
||||||
fConnectCommand = new GdbConnectCommand(session);
|
fConnectCommand = new GdbConnectCommand(session);
|
||||||
fDisconnectCommand = new GdbDisconnectCommand(session);
|
fDisconnectCommand = new GdbDisconnectCommand(session);
|
||||||
fSuspendTrigger = new GdbSuspendTrigger(session, fLaunch);
|
fSuspendTrigger = new GdbSuspendTrigger(session, fLaunch);
|
||||||
|
@ -193,7 +189,6 @@ public class GdbAdapterFactory
|
||||||
session.registerModelAdapter(IRestartHandler.class, fRestartCommand);
|
session.registerModelAdapter(IRestartHandler.class, fRestartCommand);
|
||||||
session.registerModelAdapter(ITerminateHandler.class, fTerminateCommand);
|
session.registerModelAdapter(ITerminateHandler.class, fTerminateCommand);
|
||||||
session.registerModelAdapter(IConnectHandler.class, fConnectCommand);
|
session.registerModelAdapter(IConnectHandler.class, fConnectCommand);
|
||||||
session.registerModelAdapter(IDebugNewExecutableHandler.class, fDebugNewExecutableCommand);
|
|
||||||
session.registerModelAdapter(IDisconnectHandler.class, fDisconnectCommand);
|
session.registerModelAdapter(IDisconnectHandler.class, fDisconnectCommand);
|
||||||
session.registerModelAdapter(IModelSelectionPolicyFactory.class, fModelSelectionPolicyFactory);
|
session.registerModelAdapter(IModelSelectionPolicyFactory.class, fModelSelectionPolicyFactory);
|
||||||
session.registerModelAdapter(IRefreshAllTarget.class, fRefreshAllTarget);
|
session.registerModelAdapter(IRefreshAllTarget.class, fRefreshAllTarget);
|
||||||
|
@ -254,7 +249,6 @@ public class GdbAdapterFactory
|
||||||
session.unregisterModelAdapter(IRestartHandler.class);
|
session.unregisterModelAdapter(IRestartHandler.class);
|
||||||
session.unregisterModelAdapter(ITerminateHandler.class);
|
session.unregisterModelAdapter(ITerminateHandler.class);
|
||||||
session.unregisterModelAdapter(IConnectHandler.class);
|
session.unregisterModelAdapter(IConnectHandler.class);
|
||||||
session.unregisterModelAdapter(IDebugNewExecutableHandler.class);
|
|
||||||
session.unregisterModelAdapter(IDisconnectHandler.class);
|
session.unregisterModelAdapter(IDisconnectHandler.class);
|
||||||
session.unregisterModelAdapter(IModelSelectionPolicyFactory.class);
|
session.unregisterModelAdapter(IModelSelectionPolicyFactory.class);
|
||||||
session.unregisterModelAdapter(IRefreshAllTarget.class);
|
session.unregisterModelAdapter(IRefreshAllTarget.class);
|
||||||
|
|
|
@ -1,375 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 Mentor Graphics 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:
|
|
||||||
* Mentor Graphics - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
package org.eclipse.cdt.dsf.gdb.internal.ui.commands;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.CancellationException;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.concurrent.RejectedExecutionException;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
|
||||||
import org.eclipse.cdt.debug.core.model.IDebugNewExecutableHandler;
|
|
||||||
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
|
||||||
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
|
||||||
import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
|
|
||||||
import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
|
|
||||||
import org.eclipse.cdt.dsf.concurrent.Query;
|
|
||||||
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
|
||||||
import org.eclipse.cdt.dsf.datamodel.IDMContext;
|
|
||||||
import org.eclipse.cdt.dsf.debug.service.IProcesses;
|
|
||||||
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
|
|
||||||
import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants;
|
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin;
|
|
||||||
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
|
|
||||||
import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
|
|
||||||
import org.eclipse.cdt.dsf.gdb.service.SessionType;
|
|
||||||
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
|
||||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
|
||||||
import org.eclipse.cdt.dsf.ui.viewmodel.datamodel.IDMVMContext;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
|
||||||
import org.eclipse.core.runtime.IStatus;
|
|
||||||
import org.eclipse.core.runtime.Status;
|
|
||||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
|
||||||
import org.eclipse.debug.core.IRequest;
|
|
||||||
import org.eclipse.debug.core.commands.AbstractDebugCommand;
|
|
||||||
import org.eclipse.debug.core.commands.IEnabledStateRequest;
|
|
||||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
|
||||||
import org.eclipse.jface.dialogs.TitleAreaDialog;
|
|
||||||
import org.eclipse.jface.resource.JFaceResources;
|
|
||||||
import org.eclipse.jface.window.Window;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.events.ModifyEvent;
|
|
||||||
import org.eclipse.swt.events.ModifyListener;
|
|
||||||
import org.eclipse.swt.events.SelectionAdapter;
|
|
||||||
import org.eclipse.swt.events.SelectionEvent;
|
|
||||||
import org.eclipse.swt.layout.GridData;
|
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
|
||||||
import org.eclipse.swt.widgets.Button;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
|
||||||
import org.eclipse.swt.widgets.Control;
|
|
||||||
import org.eclipse.swt.widgets.FileDialog;
|
|
||||||
import org.eclipse.swt.widgets.Label;
|
|
||||||
import org.eclipse.swt.widgets.Shell;
|
|
||||||
import org.eclipse.swt.widgets.Text;
|
|
||||||
import org.eclipse.ui.progress.UIJob;
|
|
||||||
|
|
||||||
public class GdbDebugNewExecutableCommand extends AbstractDebugCommand implements IDebugNewExecutableHandler {
|
|
||||||
|
|
||||||
private class PromptJob extends UIJob {
|
|
||||||
|
|
||||||
private DataRequestMonitor<PromptInfo> fRequestMonitor;
|
|
||||||
private boolean fRemote = false;
|
|
||||||
|
|
||||||
private PromptJob( boolean remote, DataRequestMonitor<PromptInfo> rm ) {
|
|
||||||
super( "New Executable Prompt Job" ); //$NON-NLS-1$
|
|
||||||
fRemote = remote;
|
|
||||||
fRequestMonitor = rm;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IStatus runInUIThread( IProgressMonitor monitor ) {
|
|
||||||
int flags = ( fRemote ) ? NewExecutableDialog.REMOTE : 0;
|
|
||||||
NewExecutableDialog dialog = new NewExecutableDialog( GdbUIPlugin.getShell(), flags );
|
|
||||||
final boolean canceled = dialog.open() == Window.CANCEL;
|
|
||||||
final PromptInfo info = dialog.getInfo();
|
|
||||||
fExecutor.execute( new DsfRunnable() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if ( canceled )
|
|
||||||
fRequestMonitor.cancel();
|
|
||||||
else
|
|
||||||
fRequestMonitor.setData( info );
|
|
||||||
fRequestMonitor.done();
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
return Status.OK_STATUS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class NewExecutableDialog extends TitleAreaDialog {
|
|
||||||
|
|
||||||
private static final int REMOTE = 0x1;
|
|
||||||
|
|
||||||
private int fFlags = 0;
|
|
||||||
private PromptInfo fInfo = null;
|
|
||||||
|
|
||||||
private Text fHostBinaryText;
|
|
||||||
private Text fTargetBinaryText;
|
|
||||||
private Text fArgumentsText;
|
|
||||||
|
|
||||||
private NewExecutableDialog( Shell parentShell, int flags ) {
|
|
||||||
super( parentShell );
|
|
||||||
setShellStyle( getShellStyle() | SWT.RESIZE );
|
|
||||||
fFlags = flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Control createContents( Composite parent ) {
|
|
||||||
Control control = super.createContents( parent );
|
|
||||||
validate();
|
|
||||||
return control;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Control createDialogArea( Composite parent ) {
|
|
||||||
boolean remote = (fFlags & REMOTE) > 0;
|
|
||||||
|
|
||||||
getShell().setText( Messages.GdbDebugNewExecutableCommand_Debug_New_Executable );
|
|
||||||
setTitle( Messages.GdbDebugNewExecutableCommand_Select_Binary );
|
|
||||||
String message = ( remote ) ?
|
|
||||||
Messages.GdbDebugNewExecutableCommand_Select_binaries_on_host_and_target :
|
|
||||||
Messages.GdbDebugNewExecutableCommand_Select_binary_and_specify_arguments;
|
|
||||||
setMessage( message );
|
|
||||||
|
|
||||||
Composite control = (Composite)super.createDialogArea( parent );
|
|
||||||
Composite comp = new Composite( control, SWT.NONE );
|
|
||||||
GridData gd = new GridData( SWT.FILL, SWT.FILL, true, true );
|
|
||||||
GridLayout layout = new GridLayout( 3, false );
|
|
||||||
comp.setLayout( layout );
|
|
||||||
comp.setLayoutData( gd );
|
|
||||||
|
|
||||||
new Label( comp, SWT.None ).setText( remote ? Messages.GdbDebugNewExecutableCommand_Binary_on_host : Messages.GdbDebugNewExecutableCommand_Binary );
|
|
||||||
fHostBinaryText = new Text( comp, SWT.BORDER );
|
|
||||||
fHostBinaryText.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
|
|
||||||
fHostBinaryText.addModifyListener( new ModifyListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void modifyText( ModifyEvent e ) {
|
|
||||||
validate();
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
Button browseButton = new Button( comp, SWT.PUSH );
|
|
||||||
browseButton.setText( Messages.GdbDebugNewExecutableCommand_Browse );
|
|
||||||
browseButton.setFont( JFaceResources.getDialogFont() );
|
|
||||||
setButtonLayoutData( browseButton );
|
|
||||||
browseButton.addSelectionListener( new SelectionAdapter() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void widgetSelected( SelectionEvent e ) {
|
|
||||||
FileDialog dialog = new FileDialog( getShell() );
|
|
||||||
dialog.setFileName( fHostBinaryText.getText() );
|
|
||||||
String result = dialog.open();
|
|
||||||
if ( result != null ) {
|
|
||||||
fHostBinaryText.setText( result );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
|
|
||||||
if ( remote ) {
|
|
||||||
new Label( comp, SWT.None ).setText( Messages.GdbDebugNewExecutableCommand_Binary_on_target );
|
|
||||||
fTargetBinaryText = new Text( comp, SWT.BORDER );
|
|
||||||
fTargetBinaryText.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false, 2, 1 ) );
|
|
||||||
fTargetBinaryText.addModifyListener( new ModifyListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void modifyText( ModifyEvent e ) {
|
|
||||||
validate();
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
new Label( comp, SWT.None ).setText( Messages.GdbDebugNewExecutableCommand_Arguments );
|
|
||||||
fArgumentsText = new Text( comp, SWT.BORDER );
|
|
||||||
fArgumentsText.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false, 2, 1 ) );
|
|
||||||
|
|
||||||
return control;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void okPressed() {
|
|
||||||
String targetPath = ( fTargetBinaryText != null ) ? fTargetBinaryText.getText().trim() : null;
|
|
||||||
String args = fArgumentsText.getText().trim();
|
|
||||||
fInfo = new PromptInfo( fHostBinaryText.getText().trim(), targetPath, args );
|
|
||||||
super.okPressed();
|
|
||||||
}
|
|
||||||
|
|
||||||
private PromptInfo getInfo() {
|
|
||||||
return fInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void validate() {
|
|
||||||
String message = null;
|
|
||||||
String hostBinary = fHostBinaryText.getText().trim();
|
|
||||||
File file = new File( hostBinary );
|
|
||||||
if ( !file.exists() )
|
|
||||||
message = Messages.GdbDebugNewExecutableCommand_Binary_file_does_not_exist;
|
|
||||||
else if ( file.isDirectory() )
|
|
||||||
message = Messages.GdbDebugNewExecutableCommand_Invalid_binary;
|
|
||||||
if ( fTargetBinaryText != null ) {
|
|
||||||
if ( fTargetBinaryText.getText().trim().length() == 0 )
|
|
||||||
message = Messages.GdbDebugNewExecutableCommand_Binary_on_target_must_be_specified;
|
|
||||||
}
|
|
||||||
setErrorMessage( message );
|
|
||||||
getButton( IDialogConstants.OK_ID ).setEnabled( message == null );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class PromptInfo {
|
|
||||||
private String fHostPath;
|
|
||||||
private String fTargetPath;
|
|
||||||
private String fArguments;
|
|
||||||
|
|
||||||
private PromptInfo( String hostPath, String targetPath, String args ) {
|
|
||||||
super();
|
|
||||||
fHostPath = hostPath;
|
|
||||||
fTargetPath = targetPath;
|
|
||||||
fArguments = args;
|
|
||||||
}
|
|
||||||
|
|
||||||
String getHostPath() {
|
|
||||||
return fHostPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
String getTargetPath() {
|
|
||||||
return fTargetPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
String getArguments() {
|
|
||||||
return fArguments;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final GdbLaunch fLaunch;
|
|
||||||
private final DsfExecutor fExecutor;
|
|
||||||
private final DsfServicesTracker fTracker;
|
|
||||||
|
|
||||||
public GdbDebugNewExecutableCommand( DsfSession session, GdbLaunch launch ) {
|
|
||||||
super();
|
|
||||||
fLaunch = launch;
|
|
||||||
fExecutor = session.getExecutor();
|
|
||||||
fTracker = new DsfServicesTracker( GdbUIPlugin.getBundleContext(), session.getId() );
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean canDebugNewExecutable() {
|
|
||||||
|
|
||||||
Query<Boolean> canDebugQuery = new Query<Boolean>() {
|
|
||||||
@Override
|
|
||||||
public void execute( DataRequestMonitor<Boolean> rm ) {
|
|
||||||
IProcesses procService = fTracker.getService( IProcesses.class );
|
|
||||||
IGDBBackend backend = fTracker.getService( IGDBBackend.class );
|
|
||||||
ICommandControlService commandControl = fTracker.getService( ICommandControlService.class );
|
|
||||||
|
|
||||||
if ( procService == null || commandControl == null || backend == null ) {
|
|
||||||
rm.setData( false );
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
procService.isDebugNewProcessSupported( commandControl.getContext(), rm );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
try {
|
|
||||||
fExecutor.execute( canDebugQuery );
|
|
||||||
return canDebugQuery.get();
|
|
||||||
}
|
|
||||||
catch( InterruptedException e ) {
|
|
||||||
}
|
|
||||||
catch( ExecutionException e ) {
|
|
||||||
}
|
|
||||||
catch( RejectedExecutionException e ) {
|
|
||||||
// Can be thrown if the session is shutdown
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void debugNewExecutable( final RequestMonitor rm ) {
|
|
||||||
IGDBBackend backend = fTracker.getService( IGDBBackend.class );
|
|
||||||
final IProcesses procService = fTracker.getService( IProcesses.class );
|
|
||||||
final ICommandControlService commandControl = fTracker.getService( ICommandControlService.class );
|
|
||||||
if ( backend == null || procService == null || commandControl == null ) {
|
|
||||||
rm.setStatus( new Status( IStatus.ERROR, GdbUIPlugin.PLUGIN_ID, "Service is not available" ) ); //$NON-NLS-1$
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
PromptJob job = new PromptJob(
|
|
||||||
backend.getSessionType() == SessionType.REMOTE,
|
|
||||||
new DataRequestMonitor<PromptInfo>( fExecutor, rm ){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void handleCancel() {
|
|
||||||
rm.cancel();
|
|
||||||
rm.done();
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void handleSuccess() {
|
|
||||||
try {
|
|
||||||
@SuppressWarnings( "unchecked" )
|
|
||||||
final Map<String, Object> attributes =
|
|
||||||
new HashMap<String, Object>( getLaunchConfiguration().getAttributes() );
|
|
||||||
attributes.put( IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_BINARY, getData().getTargetPath() );
|
|
||||||
attributes.put( ICDTLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, getData().getArguments() );
|
|
||||||
procService.debugNewProcess(
|
|
||||||
commandControl.getContext(),
|
|
||||||
getData().getHostPath(),
|
|
||||||
attributes,
|
|
||||||
new ImmediateDataRequestMonitor<IDMContext>( rm ) );
|
|
||||||
}
|
|
||||||
catch( CoreException e ) {
|
|
||||||
rm.setStatus( e.getStatus() );
|
|
||||||
rm.done();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} );
|
|
||||||
job.schedule();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doExecute( Object[] targets, IProgressMonitor monitor, IRequest request ) throws CoreException {
|
|
||||||
Query<Boolean> query = new Query<Boolean>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void execute( DataRequestMonitor<Boolean> rm ) {
|
|
||||||
debugNewExecutable( rm );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
try {
|
|
||||||
fExecutor.execute( query );
|
|
||||||
query.get();
|
|
||||||
}
|
|
||||||
catch( InterruptedException e ) {
|
|
||||||
}
|
|
||||||
catch( ExecutionException e ) {
|
|
||||||
}
|
|
||||||
catch( CancellationException e ) {
|
|
||||||
// Nothing to do, just ignore the command since the user
|
|
||||||
// cancelled it.
|
|
||||||
}
|
|
||||||
catch( RejectedExecutionException e ) {
|
|
||||||
// Can be thrown if the session is shutdown
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean isExecutable( Object[] targets, IProgressMonitor monitor, IEnabledStateRequest request ) throws CoreException {
|
|
||||||
return canDebugNewExecutable();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Object getTarget( Object element ) {
|
|
||||||
if ( element instanceof GdbLaunch || element instanceof IDMVMContext )
|
|
||||||
return element;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void dispose() {
|
|
||||||
fTracker.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
private ILaunchConfiguration getLaunchConfiguration() {
|
|
||||||
return fLaunch.getLaunchConfiguration();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 Mentor Graphics 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:
|
|
||||||
* Mentor Graphics - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
package org.eclipse.cdt.dsf.gdb.internal.ui.commands;
|
|
||||||
|
|
||||||
import org.eclipse.osgi.util.NLS;
|
|
||||||
|
|
||||||
public class Messages extends NLS {
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Arguments;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Binary;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Binary_file_does_not_exist;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Binary_on_host;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Binary_on_target;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Binary_on_target_must_be_specified;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Browse;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Debug_New_Executable;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Invalid_binary;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Select_binaries_on_host_and_target;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Select_Binary;
|
|
||||||
|
|
||||||
public static String GdbDebugNewExecutableCommand_Select_binary_and_specify_arguments;
|
|
||||||
static {
|
|
||||||
// initialize resource bundle
|
|
||||||
NLS.initializeMessages( Messages.class.getName(), Messages.class );
|
|
||||||
}
|
|
||||||
|
|
||||||
private Messages() {
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
GdbDebugNewExecutableCommand_Arguments=Arguments:
|
|
||||||
GdbDebugNewExecutableCommand_Binary=Binary:
|
|
||||||
GdbDebugNewExecutableCommand_Binary_file_does_not_exist=Binary file does not exist
|
|
||||||
GdbDebugNewExecutableCommand_Binary_on_host=Binary on host:
|
|
||||||
GdbDebugNewExecutableCommand_Binary_on_target=Binary on target:
|
|
||||||
GdbDebugNewExecutableCommand_Binary_on_target_must_be_specified=Binary on target must be specified
|
|
||||||
GdbDebugNewExecutableCommand_Browse=Browse...
|
|
||||||
GdbDebugNewExecutableCommand_Debug_New_Executable=Debug New Executable
|
|
||||||
GdbDebugNewExecutableCommand_Invalid_binary=Invalid binary
|
|
||||||
GdbDebugNewExecutableCommand_Select_binaries_on_host_and_target=Select binaries on the host and the target and specify the arguments
|
|
||||||
GdbDebugNewExecutableCommand_Select_Binary=Select Binary
|
|
||||||
GdbDebugNewExecutableCommand_Select_binary_and_specify_arguments=Select a binary and specify the arguments
|
|
|
@ -114,13 +114,6 @@ public class IGDBLaunchConfigurationConstants {
|
||||||
*/
|
*/
|
||||||
public static final String ATTR_DEBUGGER_TRACEPOINT_MODE = GdbPlugin.PLUGIN_ID + ".TRACEPOINT_MODE"; //$NON-NLS-1$
|
public static final String ATTR_DEBUGGER_TRACEPOINT_MODE = GdbPlugin.PLUGIN_ID + ".TRACEPOINT_MODE"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
|
||||||
* Launch configuration attribute key. The value is a String specifying the path of the executable
|
|
||||||
* on the target.
|
|
||||||
* @since 4.2
|
|
||||||
*/
|
|
||||||
public static final String ATTR_DEBUGGER_REMOTE_BINARY = GdbPlugin.PLUGIN_ID + ".REMOTE_BINARY"; //$NON-NLS-1$
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Launch configuration attribute value. The key is ATTR_DEBUG_NAME.
|
* Launch configuration attribute value. The key is ATTR_DEBUG_NAME.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -19,7 +19,6 @@ import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.RejectedExecutionException;
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.core.model.IConnectHandler;
|
import org.eclipse.cdt.debug.core.model.IConnectHandler;
|
||||||
import org.eclipse.cdt.debug.core.model.IDebugNewExecutableHandler;
|
|
||||||
import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor;
|
import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DefaultDsfExecutor;
|
import org.eclipse.cdt.dsf.concurrent.DefaultDsfExecutor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
||||||
|
@ -296,9 +295,6 @@ public class GdbLaunch extends DsfLaunch
|
||||||
if (adapter.equals(IConnectHandler.class))
|
if (adapter.equals(IConnectHandler.class))
|
||||||
return getSession().getModelAdapter(adapter);
|
return getSession().getModelAdapter(adapter);
|
||||||
|
|
||||||
if (adapter.equals(IDebugNewExecutableHandler.class))
|
|
||||||
return getSession().getModelAdapter(adapter);
|
|
||||||
|
|
||||||
// Must force adapters to be loaded.
|
// Must force adapters to be loaded.
|
||||||
Platform.getAdapterManager().loadAdapter(this, adapter.getName());
|
Platform.getAdapterManager().loadAdapter(this, adapter.getName());
|
||||||
return super.getAdapter(adapter);
|
return super.getAdapter(adapter);
|
||||||
|
|
|
@ -200,13 +200,9 @@ public class DebugNewProcessSequence extends ReflectionSequence {
|
||||||
@Execute
|
@Execute
|
||||||
public void stepSetArguments(RequestMonitor rm) {
|
public void stepSetArguments(RequestMonitor rm) {
|
||||||
try {
|
try {
|
||||||
String args = CDebugUtils.getAttribute(
|
String args = fBackend.getProgramArguments();
|
||||||
fAttributes,
|
|
||||||
ICDTLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,
|
|
||||||
""); //$NON-NLS-1$
|
|
||||||
|
|
||||||
if (args.length() != 0) {
|
if (args != null) {
|
||||||
args = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(args);
|
|
||||||
String[] argArray = CommandLineUtil.argumentsToArray(args);
|
String[] argArray = CommandLineUtil.argumentsToArray(args);
|
||||||
fCommandControl.queueCommand(
|
fCommandControl.queueCommand(
|
||||||
fCommandFactory.createMIGDBSetArgs(getContainerContext(), argArray),
|
fCommandFactory.createMIGDBSetArgs(getContainerContext(), argArray),
|
||||||
|
|
|
@ -15,19 +15,15 @@ import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.core.CDebugUtils;
|
|
||||||
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
|
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
|
||||||
import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.datamodel.IDMContext;
|
import org.eclipse.cdt.dsf.datamodel.IDMContext;
|
||||||
import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants;
|
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
||||||
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
|
||||||
import org.eclipse.cdt.dsf.mi.service.command.output.MIAddInferiorInfo;
|
import org.eclipse.cdt.dsf.mi.service.command.output.MIAddInferiorInfo;
|
||||||
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
|
|
||||||
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
@ -44,37 +40,14 @@ public class DebugNewProcessSequence_7_2 extends DebugNewProcessSequence {
|
||||||
|
|
||||||
private IGDBControl fGdbControl;
|
private IGDBControl fGdbControl;
|
||||||
private IGDBProcesses fProcService;
|
private IGDBProcesses fProcService;
|
||||||
private IGDBBackend fBackend;
|
|
||||||
private CommandFactory fCommandFactory;
|
|
||||||
private String fSessionId;
|
private String fSessionId;
|
||||||
private final boolean fInitialProcess;
|
private final boolean fInitialProcess;
|
||||||
private final Map<String, Object> fAttributes;
|
|
||||||
|
|
||||||
public DebugNewProcessSequence_7_2(
|
public DebugNewProcessSequence_7_2(DsfExecutor executor, boolean isInitial, IDMContext dmc, String file,
|
||||||
DsfExecutor executor,
|
Map<String, Object> attributes, DataRequestMonitor<IDMContext> rm) {
|
||||||
boolean isInitial,
|
super(executor, isInitial, dmc, file, attributes, rm);
|
||||||
IDMContext dmc,
|
|
||||||
String file,
|
|
||||||
Map<String, Object> attributes,
|
|
||||||
DataRequestMonitor<IDMContext> rm) {
|
|
||||||
this(executor, isInitial, dmc, file, null, attributes, rm);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @since 4.2
|
|
||||||
*/
|
|
||||||
public DebugNewProcessSequence_7_2(
|
|
||||||
DsfExecutor executor,
|
|
||||||
boolean isInitial,
|
|
||||||
IDMContext dmc,
|
|
||||||
String fileOnHost,
|
|
||||||
String fileOnTarget,
|
|
||||||
Map<String, Object> attributes,
|
|
||||||
DataRequestMonitor<IDMContext> rm) {
|
|
||||||
super(executor, isInitial, dmc, fileOnHost, attributes, rm);
|
|
||||||
fSessionId = dmc.getSessionId();
|
fSessionId = dmc.getSessionId();
|
||||||
fInitialProcess = isInitial;
|
fInitialProcess = isInitial;
|
||||||
fAttributes = attributes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -87,7 +60,6 @@ public class DebugNewProcessSequence_7_2 extends DebugNewProcessSequence {
|
||||||
// Now insert our steps right after the initialization of the base class.
|
// Now insert our steps right after the initialization of the base class.
|
||||||
orderList.add(orderList.indexOf("stepInitializeBaseSequence") + 1, "stepInitializeSequence_7_2"); //$NON-NLS-1$ //$NON-NLS-2$
|
orderList.add(orderList.indexOf("stepInitializeBaseSequence") + 1, "stepInitializeSequence_7_2"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
orderList.add(orderList.indexOf("stepInitializeSequence_7_2") + 1, "stepAddInferior"); //$NON-NLS-1$ //$NON-NLS-2$
|
orderList.add(orderList.indexOf("stepInitializeSequence_7_2") + 1, "stepAddInferior"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
orderList.add(orderList.indexOf("stepSetExecutable") + 1, "stepSetRemoteExecutable"); //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
|
|
||||||
return orderList.toArray(new String[orderList.size()]);
|
return orderList.toArray(new String[orderList.size()]);
|
||||||
}
|
}
|
||||||
|
@ -104,17 +76,14 @@ public class DebugNewProcessSequence_7_2 extends DebugNewProcessSequence {
|
||||||
DsfServicesTracker tracker = new DsfServicesTracker(GdbPlugin.getBundleContext(), fSessionId);
|
DsfServicesTracker tracker = new DsfServicesTracker(GdbPlugin.getBundleContext(), fSessionId);
|
||||||
fGdbControl = tracker.getService(IGDBControl.class);
|
fGdbControl = tracker.getService(IGDBControl.class);
|
||||||
fProcService = tracker.getService(IGDBProcesses.class);
|
fProcService = tracker.getService(IGDBProcesses.class);
|
||||||
fBackend = tracker.getService(IGDBBackend.class);
|
|
||||||
tracker.dispose();
|
tracker.dispose();
|
||||||
|
|
||||||
if (fGdbControl == null || fProcService == null || fBackend == null) {
|
if (fGdbControl == null || fProcService == null) {
|
||||||
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, IDsfStatusConstants.INTERNAL_ERROR, "Cannot obtain service", null)); //$NON-NLS-1$
|
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, IDsfStatusConstants.INTERNAL_ERROR, "Cannot obtain service", null)); //$NON-NLS-1$
|
||||||
rm.done();
|
rm.done();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fCommandFactory = fGdbControl.getCommandFactory();
|
|
||||||
|
|
||||||
rm.done();
|
rm.done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,36 +120,4 @@ public class DebugNewProcessSequence_7_2 extends DebugNewProcessSequence {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Set remote executable.
|
|
||||||
* @since 4.2
|
|
||||||
*/
|
|
||||||
@Execute
|
|
||||||
public void stepSetRemoteExecutable(final RequestMonitor rm) {
|
|
||||||
if (fBackend.getSessionType() == SessionType.REMOTE && fBackend.getIsAttachSession()) {
|
|
||||||
String remoteBinary = CDebugUtils.getAttribute(
|
|
||||||
fAttributes,
|
|
||||||
IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_BINARY,
|
|
||||||
""); //$NON-NLS-1$
|
|
||||||
if (remoteBinary.length() == 0) {
|
|
||||||
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, "Binary on host is not specified")); //$NON-NLS-1$
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
fGdbControl.queueCommand(
|
|
||||||
fCommandFactory.createMIGDBSet(
|
|
||||||
getContainerContext(),
|
|
||||||
new String[] {
|
|
||||||
"remote", //$NON-NLS-1$
|
|
||||||
"exec-file", //$NON-NLS-1$
|
|
||||||
remoteBinary,
|
|
||||||
}),
|
|
||||||
new ImmediateDataRequestMonitor<MIInfo>(rm));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
rm.done();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -469,13 +469,10 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Multi-process does not work for all-stop right now
|
// We don't yet support starting a new process on a remote target
|
||||||
IMIRunControl runControl = getServicesTracker().getService(IMIRunControl.class);
|
// Bug 344890
|
||||||
if (runControl != null && runControl.getRunMode() == MIRunMode.ALL_STOP) {
|
if (type == SessionType.REMOTE && fBackend.getIsAttachSession()) {
|
||||||
// Only one process is allowed in all-stop (for now)
|
return false;
|
||||||
return getNumConnected() == 0;
|
|
||||||
// NOTE: when we support multi-process in all-stop mode,
|
|
||||||
// we will need to interrupt the target to when doing the attach.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -296,9 +296,11 @@ public class StartOrRestartProcessSequence_7_0 extends ReflectionSequence {
|
||||||
*/
|
*/
|
||||||
@Execute
|
@Execute
|
||||||
public void stepCreateConsole(final RequestMonitor rm) {
|
public void stepCreateConsole(final RequestMonitor rm) {
|
||||||
if (fBackend.getSessionType() == SessionType.REMOTE) {
|
if (fBackend.getSessionType() == SessionType.REMOTE && !fBackend.getIsAttachSession()) {
|
||||||
// The program output for a remote session is handled by gdbserver. Therefore,
|
// Remote non-attach sessions don't support multi-process and therefore will not
|
||||||
// no need to create an inferior process and add it to the launch.
|
// start new processes. Those sessions will only start the one process, which should
|
||||||
|
// not have a console, because it's output is handled by GDB server. Therefore,
|
||||||
|
// no need to create an inferior process and add it to the launch
|
||||||
rm.done();
|
rm.done();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue