mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-09 01:05:38 +02:00
[202346] Create GdbSteppingModeTarget that checks if we are doing a
post-mortem launch, to know if the stepping mode button should be disabled.
This commit is contained in:
parent
e080fa5221
commit
2a589c0f4b
2 changed files with 73 additions and 3 deletions
|
@ -23,7 +23,6 @@ import org.eclipse.cdt.dsf.debug.ui.actions.DsfResumeCommand;
|
||||||
import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepIntoCommand;
|
import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepIntoCommand;
|
||||||
import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepOverCommand;
|
import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepOverCommand;
|
||||||
import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepReturnCommand;
|
import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepReturnCommand;
|
||||||
import org.eclipse.cdt.dsf.debug.ui.actions.DsfSteppingModeTarget;
|
|
||||||
import org.eclipse.cdt.dsf.debug.ui.actions.DsfSuspendCommand;
|
import org.eclipse.cdt.dsf.debug.ui.actions.DsfSuspendCommand;
|
||||||
import org.eclipse.cdt.dsf.debug.ui.contexts.DsfSuspendTrigger;
|
import org.eclipse.cdt.dsf.debug.ui.contexts.DsfSuspendTrigger;
|
||||||
import org.eclipse.cdt.dsf.debug.ui.sourcelookup.DsfSourceDisplayAdapter;
|
import org.eclipse.cdt.dsf.debug.ui.sourcelookup.DsfSourceDisplayAdapter;
|
||||||
|
@ -45,6 +44,7 @@ import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbReverseResumeCommand;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbReverseStepIntoCommand;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbReverseStepIntoCommand;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbReverseStepOverCommand;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbReverseStepOverCommand;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbReverseToggleCommand;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbReverseToggleCommand;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbSteppingModeTarget;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbUncallCommand;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbUncallCommand;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.ui.viewmodel.GdbViewModelAdapter;
|
import org.eclipse.cdt.dsf.gdb.internal.ui.viewmodel.GdbViewModelAdapter;
|
||||||
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
|
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
|
||||||
|
@ -101,7 +101,7 @@ public class GdbAdapterFactory
|
||||||
final GdbDisconnectCommand fDisconnectCommand;
|
final GdbDisconnectCommand fDisconnectCommand;
|
||||||
final IDebugModelProvider fDebugModelProvider;
|
final IDebugModelProvider fDebugModelProvider;
|
||||||
final DsfSuspendTrigger fSuspendTrigger;
|
final DsfSuspendTrigger fSuspendTrigger;
|
||||||
final DsfSteppingModeTarget fSteppingModeTarget;
|
final GdbSteppingModeTarget fSteppingModeTarget;
|
||||||
final IModelSelectionPolicyFactory fModelSelectionPolicyFactory;
|
final IModelSelectionPolicyFactory fModelSelectionPolicyFactory;
|
||||||
final SteppingController fSteppingController;
|
final SteppingController fSteppingController;
|
||||||
final DefaultRefreshAllTarget fRefreshAllTarget;
|
final DefaultRefreshAllTarget fRefreshAllTarget;
|
||||||
|
@ -124,7 +124,7 @@ public class GdbAdapterFactory
|
||||||
}
|
}
|
||||||
session.registerModelAdapter(ISourceDisplay.class, fSourceDisplayAdapter);
|
session.registerModelAdapter(ISourceDisplay.class, fSourceDisplayAdapter);
|
||||||
|
|
||||||
fSteppingModeTarget= new DsfSteppingModeTarget();
|
fSteppingModeTarget = new GdbSteppingModeTarget(session);
|
||||||
fStepIntoCommand = new DsfStepIntoCommand(session, fSteppingModeTarget);
|
fStepIntoCommand = new DsfStepIntoCommand(session, fSteppingModeTarget);
|
||||||
fReverseStepIntoCommand = new GdbReverseStepIntoCommand(session, fSteppingModeTarget);
|
fReverseStepIntoCommand = new GdbReverseStepIntoCommand(session, fSteppingModeTarget);
|
||||||
fStepOverCommand = new DsfStepOverCommand(session, fSteppingModeTarget);
|
fStepOverCommand = new DsfStepOverCommand(session, fSteppingModeTarget);
|
||||||
|
@ -206,6 +206,7 @@ public class GdbAdapterFactory
|
||||||
session.unregisterModelAdapter(IRefreshAllTarget.class);
|
session.unregisterModelAdapter(IRefreshAllTarget.class);
|
||||||
session.unregisterModelAdapter(IReverseToggleHandler.class);
|
session.unregisterModelAdapter(IReverseToggleHandler.class);
|
||||||
|
|
||||||
|
fSteppingModeTarget.dispose();
|
||||||
fStepIntoCommand.dispose();
|
fStepIntoCommand.dispose();
|
||||||
fReverseStepIntoCommand.dispose();
|
fReverseStepIntoCommand.dispose();
|
||||||
fStepOverCommand.dispose();
|
fStepOverCommand.dispose();
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2009 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.cdt.dsf.gdb.internal.ui.actions;
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.Query;
|
||||||
|
import org.eclipse.cdt.dsf.debug.ui.actions.DsfSteppingModeTarget;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SteppingModeTarget that allows to disable the button when dealing
|
||||||
|
* with a post-mortem debugging session.
|
||||||
|
*
|
||||||
|
* @since 2.0
|
||||||
|
*/
|
||||||
|
public class GdbSteppingModeTarget extends DsfSteppingModeTarget {
|
||||||
|
private final DsfExecutor fExecutor;
|
||||||
|
private final DsfServicesTracker fTracker;
|
||||||
|
|
||||||
|
public GdbSteppingModeTarget(DsfSession session) {
|
||||||
|
fExecutor = session.getExecutor();
|
||||||
|
fTracker = new DsfServicesTracker(GdbUIPlugin.getBundleContext(), session.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dispose() {
|
||||||
|
fTracker.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsInstructionStepping() {
|
||||||
|
Query<Boolean> supportInstructionStepping = new Query<Boolean>() {
|
||||||
|
@Override
|
||||||
|
protected void execute(DataRequestMonitor<Boolean> rm) {
|
||||||
|
IGDBBackend backend = fTracker.getService(IGDBBackend.class);
|
||||||
|
if (backend != null) {
|
||||||
|
// PostMortem sessions do not support instruction stepping
|
||||||
|
rm.setData(backend.getSessionType() != SessionType.CORE);
|
||||||
|
} else {
|
||||||
|
rm.setData(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
fExecutor.execute(supportInstructionStepping);
|
||||||
|
try {
|
||||||
|
return supportInstructionStepping.get();
|
||||||
|
} catch (InterruptedException e1) {
|
||||||
|
} catch (ExecutionException e1) {
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue