mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 08:55:25 +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.DsfStepOverCommand;
|
||||
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.contexts.DsfSuspendTrigger;
|
||||
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.GdbReverseStepOverCommand;
|
||||
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.viewmodel.GdbViewModelAdapter;
|
||||
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
|
||||
|
@ -101,7 +101,7 @@ public class GdbAdapterFactory
|
|||
final GdbDisconnectCommand fDisconnectCommand;
|
||||
final IDebugModelProvider fDebugModelProvider;
|
||||
final DsfSuspendTrigger fSuspendTrigger;
|
||||
final DsfSteppingModeTarget fSteppingModeTarget;
|
||||
final GdbSteppingModeTarget fSteppingModeTarget;
|
||||
final IModelSelectionPolicyFactory fModelSelectionPolicyFactory;
|
||||
final SteppingController fSteppingController;
|
||||
final DefaultRefreshAllTarget fRefreshAllTarget;
|
||||
|
@ -124,7 +124,7 @@ public class GdbAdapterFactory
|
|||
}
|
||||
session.registerModelAdapter(ISourceDisplay.class, fSourceDisplayAdapter);
|
||||
|
||||
fSteppingModeTarget= new DsfSteppingModeTarget();
|
||||
fSteppingModeTarget = new GdbSteppingModeTarget(session);
|
||||
fStepIntoCommand = new DsfStepIntoCommand(session, fSteppingModeTarget);
|
||||
fReverseStepIntoCommand = new GdbReverseStepIntoCommand(session, fSteppingModeTarget);
|
||||
fStepOverCommand = new DsfStepOverCommand(session, fSteppingModeTarget);
|
||||
|
@ -206,6 +206,7 @@ public class GdbAdapterFactory
|
|||
session.unregisterModelAdapter(IRefreshAllTarget.class);
|
||||
session.unregisterModelAdapter(IReverseToggleHandler.class);
|
||||
|
||||
fSteppingModeTarget.dispose();
|
||||
fStepIntoCommand.dispose();
|
||||
fReverseStepIntoCommand.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