diff --git a/debug/org.eclipse.cdt.debug.core/META-INF/MANIFEST.MF b/debug/org.eclipse.cdt.debug.core/META-INF/MANIFEST.MF
index 8a71d077903..b3edf629abe 100644
--- a/debug/org.eclipse.cdt.debug.core/META-INF/MANIFEST.MF
+++ b/debug/org.eclipse.cdt.debug.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.debug.core; singleton:=true
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
Bundle-Activator: org.eclipse.cdt.debug.core.CDebugCorePlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/debug/org.eclipse.cdt.debug.core/pom.xml b/debug/org.eclipse.cdt.debug.core/pom.xml
index e4057ab2528..0bbf1dbfe5f 100644
--- a/debug/org.eclipse.cdt.debug.core/pom.xml
+++ b/debug/org.eclipse.cdt.debug.core/pom.xml
@@ -11,7 +11,7 @@
../../pom.xml
- 7.7.0-SNAPSHOT
+ 7.8.0-SNAPSHOT
org.eclipse.cdt.debug.core
eclipse-plugin
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IChangeReverseMethodHandler.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IChangeReverseMethodHandler.java
new file mode 100644
index 00000000000..5766dea6b0b
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IChangeReverseMethodHandler.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Intel Corporation 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:
+ * Intel Corporation - Added Reverse Debugging BTrace support
+ *******************************************************************************/
+package org.eclipse.cdt.debug.core.model;
+
+import org.eclipse.debug.core.commands.IDebugCommandHandler;
+
+/**
+ * Handler interface for the reverse debug change trace method command
+ *
+ * @since 7.8
+ */
+public interface IChangeReverseMethodHandler extends IReverseToggleHandler, IDebugCommandHandler {
+
+ public enum ReverseTraceMethod {INVALID, STOP_TRACE, FULL_TRACE, HARDWARE_TRACE, BRANCH_TRACE, PROCESSOR_TRACE, GDB_TRACE};
+
+ void setTraceMethod(ReverseTraceMethod traceMethod);
+
+ /**
+ * get the trace method
+ * @return FullTrace, BranchTrace, ProcessorTrace
+ *
+ */
+ ReverseTraceMethod getTraceMethod(Object context);
+}
diff --git a/debug/org.eclipse.cdt.debug.ui/icons/obj16/branch_trace_off.gif b/debug/org.eclipse.cdt.debug.ui/icons/obj16/branch_trace_off.gif
new file mode 100644
index 00000000000..01459f3a717
Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/obj16/branch_trace_off.gif differ
diff --git a/debug/org.eclipse.cdt.debug.ui/icons/obj16/branch_trace_on.gif b/debug/org.eclipse.cdt.debug.ui/icons/obj16/branch_trace_on.gif
new file mode 100644
index 00000000000..a08d67eb440
Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/obj16/branch_trace_on.gif differ
diff --git a/debug/org.eclipse.cdt.debug.ui/icons/obj16/full_trace_off.gif b/debug/org.eclipse.cdt.debug.ui/icons/obj16/full_trace_off.gif
new file mode 100644
index 00000000000..43c4061ba47
Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/obj16/full_trace_off.gif differ
diff --git a/debug/org.eclipse.cdt.debug.ui/icons/obj16/full_trace_on.gif b/debug/org.eclipse.cdt.debug.ui/icons/obj16/full_trace_on.gif
new file mode 100644
index 00000000000..97b7667c21e
Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/obj16/full_trace_on.gif differ
diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties
index 387caa68005..8863c434586 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.properties
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties
@@ -15,6 +15,7 @@
# Alvaro Sanchez-Leon (Ericsson AB) - Support for Step into selection (bug 244865)
# Marc Khouzam (Ericsson) - Added dynamic printf support (Bug 400628)
# Jonah Graham (Kichwa Coders) - Create "Add Line Breakpoint (C/C++)" action (Bug 464917)
+# Intel Corporation - Added Reverse Debugging BTrace support
###############################################################################
pluginName=C/C++ Development Tools Debugger UI
@@ -210,6 +211,7 @@ ReverseDebuggingCategory.description = Set of commands for Reverse Debugging
ReverseToggle.name = Reverse Toggle
ReverseToggle.description = Toggle Reverse Debugging
ReverseToggle.label = Toggle Reverse Debugging
+ReverseToggle.commandparam = TraceMethod
ReverseResume.name = Reverse Resume
ReverseResume.description = Perform Reverse Resume
ReverseResume.label = Reverse Resume
@@ -222,6 +224,15 @@ ReverseStepOver.label = Reverse Step Over
Uncall.name = Uncall
Uncall.description = Perform Uncall
Uncall.label = Uncall
+ChangeTraceMethod.name = Set Reverse Debugging Trace Method
+ChangeTraceMethod.description = Set Reverse Debugging Trace Method
+ChangeTraceMethod.label = Set Reverse Debugging Trace Method
+SoftwareTrace.name = Use Software Trace
+SoftwareTrace.description = Use Software Trace for Reverse Debugging. Slow, but detailed reverse debugging method.
+SoftwareTrace.label = Use Software Trace
+HardwareTrace.name = Use Hardware Trace
+HardwareTrace.description = Use Hardware Trace for Reverse Debugging. Fast, but less detailed reverse debugging method.
+HardwareTrace.label = Use Hardware Trace
# Connect command
Connect.name = Connect
diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml
index 80d38e42ea8..2487d86a5a6 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.xml
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml
@@ -1911,6 +1911,21 @@
description="%ReverseToggle.description"
id="org.eclipse.cdt.debug.ui.command.reverseToggle"
name="%ReverseToggle.name">
+
+
+
+
+
+
+
+
+ style="pulldown">
@@ -2444,15 +2459,15 @@
-
+ style="pulldown">
-
+
@@ -2506,15 +2521,35 @@
-
+ style="pulldown">
-
+
+
+
+
+
+
+
+
+
@@ -2595,12 +2630,55 @@
commandId="org.eclipse.cdt.debug.ui.command.reverseToggle"
icon="icons/obj16/reverse_toggle.gif"
label="%ReverseToggle.label"
- style="toggle">
+ style="pulldown">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
getCommandType() {
- return IReverseToggleHandler.class;
- }
+
+ ReverseTraceMethod traceMethod = null;
+ ReverseTraceMethod lastTraceMethod = null;
+ ImageDescriptor tracemethodOnImages[];
+ ImageDescriptor tracemethodOffImages[];
+ ImageDescriptor tracemethodDefaultImage = null;
+ @Override
+ protected Class> getCommandType() {
+ return IReverseToggleHandler.class;
+ }
//
// The below logic allows us to keep the checked state of the toggle button
@@ -62,25 +86,42 @@ public class ReverseToggleCommandHandler extends DebugCommandHandler implements
private IReverseToggleHandler fTargetAdapter = null;
private IDebugContextService fContextService = null;
+ private ImageDescriptor getImageDescriptor (String path) {
+ Bundle bundle = Platform.getBundle("org.eclipse.cdt.debug.ui"); //$NON-NLS-1$
+ URL url = null;
+ if (bundle != null){
+ url = FileLocator.find(bundle, new Path(path), null);
+ if(url != null) {
+ return ImageDescriptor.createFromURL(url);
+ }
+ }
+ return null;
+ }
+
public ReverseToggleCommandHandler() {
- final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (window != null) {
- window.getShell().getDisplay().asyncExec(new Runnable() {
+ fContextService = DebugUITools.getDebugContextManager().getContextService(window);
+ if (fContextService != null) {
+ fContextService.addPostDebugContextListener(this);
- @Override
- public void run() {
- fContextService = DebugUITools.getDebugContextManager().getContextService(window);
- if (fContextService != null) {
- fContextService.addPostDebugContextListener(ReverseToggleCommandHandler.this);
+ // This constructor might be called after the launch, so we must refresh here too.
+ // This can happen if we activate the action set after the launch.
+ refresh(fContextService.getActiveContext());
- // This constructor might be called after the launch, so we must refresh here too.
- // This can happen if we activate the action set after the launch.
- refresh(fContextService.getActiveContext());
- }
- }
- });
- }
- }
+ tracemethodOnImages = new ImageDescriptor[2];
+ tracemethodOffImages = new ImageDescriptor[2];
+ tracemethodDefaultImage = getImageDescriptor("icons/obj16/reverse_toggle.gif"); //$NON-NLS-1$
+ tracemethodOnImages[0] = getImageDescriptor("icons/obj16/full_trace_on.gif"); //$NON-NLS-1$
+ tracemethodOnImages[1] = getImageDescriptor("icons/obj16/branch_trace_on.gif"); //$NON-NLS-1$
+ tracemethodOffImages[0] = getImageDescriptor("icons/obj16/full_trace_off.gif"); //$NON-NLS-1$
+ tracemethodOffImages[1] = getImageDescriptor("icons/obj16/branch_trace_off.gif"); //$NON-NLS-1$
+
+ traceMethod = ReverseTraceMethod.STOP_TRACE;
+ lastTraceMethod = ReverseTraceMethod.STOP_TRACE;
+ }
+ }
+ }
@Override
public void dispose() {
@@ -96,7 +137,7 @@ public class ReverseToggleCommandHandler extends DebugCommandHandler implements
}
@Override
- public void debugContextChanged(DebugContextEvent event) {
+ public void debugContextChanged(DebugContextEvent event) {
refresh(event.getContext());
}
@@ -119,15 +160,79 @@ public class ReverseToggleCommandHandler extends DebugCommandHandler implements
}
}
- private IReverseToggleHandler getAdapter(IAdaptable adaptable) {
- IReverseToggleHandler adapter = adaptable.getAdapter(IReverseToggleHandler.class);
+ private IChangeReverseMethodHandler getAdapter(IAdaptable adaptable) {
+ IReverseToggleHandler adapter = adaptable.getAdapter(IReverseToggleHandler.class);
if (adapter == null) {
IAdapterManager adapterManager = Platform.getAdapterManager();
if (adapterManager.hasAdapter(adaptable, getCommandType().getName())) {
adapter = (IReverseToggleHandler)adapterManager.loadAdapter(adaptable, IReverseToggleHandler.class.getName());
}
}
- return adapter;
+ if (adapter instanceof IChangeReverseMethodHandler)
+ return (IChangeReverseMethodHandler)adapter;
+ else
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.ui.actions.DebugCommandHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ReverseTraceMethod traceMethod;
+ try {
+
+ if(HandlerUtil.matchesRadioState(event)) {
+ return null;
+ }
+
+ String radioState = event.getParameter(RadioState.PARAMETER_ID);
+
+ if (radioState.equals("UseSoftTrace")) { //$NON-NLS-1$
+ traceMethod = ReverseTraceMethod.FULL_TRACE;
+ }
+ else if (radioState.equals("UseHardTrace")) { //$NON-NLS-1$
+ traceMethod = ReverseTraceMethod.HARDWARE_TRACE;
+ }
+ else {
+ // undefined trace method
+ throw new ExecutionException("Undefined trace method for Reverse Debugging."); //$NON-NLS-1$
+ }
+
+ // store the parameter in the gdb command handler class
+ if (fTargetAdapter != null && fTargetAdapter instanceof IChangeReverseMethodHandler) {
+ ((IChangeReverseMethodHandler)fTargetAdapter).setTraceMethod(traceMethod);
+ }
+
+ // execute the event
+ super.execute(event);
+
+ // and finally update the radio current state
+ HandlerUtil.updateRadioState(event.getCommand(), radioState);
+
+ return null;
+ }
+ catch ( NullPointerException | ExecutionException e) {
+ // Disable tracing
+ if (fTargetAdapter != null && fTargetAdapter instanceof IChangeReverseMethodHandler) {
+ if (fTargetAdapter.toggleNeedsUpdating()){
+ ReverseTraceMethod currMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getTraceMethod(fActiveContext);
+ if(currMethod == ReverseTraceMethod.STOP_TRACE) {
+ if( lastTraceMethod != ReverseTraceMethod.STOP_TRACE && lastTraceMethod != ReverseTraceMethod.FULL_TRACE) {
+ traceMethod = ReverseTraceMethod.HARDWARE_TRACE;
+ }
+ else
+ traceMethod = ReverseTraceMethod.FULL_TRACE;
+
+ }
+ else
+ traceMethod = ReverseTraceMethod.STOP_TRACE;
+ ((IChangeReverseMethodHandler)fTargetAdapter).setTraceMethod(traceMethod);
+ }
+ }
+ super.execute(event);
+ return null;
+ }
}
/*
@@ -137,38 +242,88 @@ public class ReverseToggleCommandHandler extends DebugCommandHandler implements
* We keep this logic for users that may not do the refresh themselves.
*/
@Override
- protected void postExecute(IRequest request, Object[] targets) {
- super.postExecute(request, targets);
- new WorkbenchJob("") { //$NON-NLS-1$
- @Override
- public IStatus runInUIThread(IProgressMonitor monitor) {
- // Request re-evaluation of property "org.eclipse.cdt.debug.ui.isReverseDebuggingEnabled" to update
- // visibility of reverse stepping commands.
- IEvaluationService exprService = PlatformUI.getWorkbench().getService(IEvaluationService.class);
- if (exprService != null) {
- exprService.requestEvaluation("org.eclipse.cdt.debug.ui.isReverseDebuggingEnabled"); //$NON-NLS-1$
- }
- // Refresh reverse toggle commands with the new state of reverse enabled.
- // This is in order to keep multiple toggle actions in UI in sync.
- ICommandService commandService = PlatformUI.getWorkbench().getService(ICommandService.class);
- if (commandService != null) {
- commandService.refreshElements(REVERSE_TOGGLE_COMMAND_ID, null);
- }
-
- return Status.OK_STATUS;
- }
- }.schedule();
+ protected void postExecute(final IRequest request, Object[] targets) {
+ super.postExecute(request, targets);
+ new WorkbenchJob("") { //$NON-NLS-1$
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ boolean prop = CDebugUIPlugin.getDefault().getPreferenceStore().getBoolean(ICDebugPreferenceConstants.PREF_SHOW_ERROR_REVERSE_TRACE_METHOD_NOT_AVAILABLE);
+ if(prop && request.getStatus() != null && request.getStatus().getCode() != 0 ) {
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ Shell activeShell = null;
+ if(window != null)
+ activeShell = window.getShell();
+ else
+ activeShell = new Shell(PlatformUI.getWorkbench().getDisplay());
+
+ MessageDialogWithToggle dialogbox = new MessageDialogWithToggle(activeShell, "Error", //$NON-NLS-1$
+ null, "Hardware Tracing Method not available, Reverse debugging is switched Off, please select another method", MessageDialog.QUESTION, //$NON-NLS-1$
+ new String[] {IDialogConstants.OK_LABEL}, 0,
+ "Don't show this message again", false); //$NON-NLS-1$
+ dialogbox.setPrefStore(CDebugUIPlugin.getDefault().getPreferenceStore());
+ dialogbox.setPrefKey(ICDebugPreferenceConstants.PREF_SHOW_ERROR_REVERSE_TRACE_METHOD_NOT_AVAILABLE);
+ if(dialogbox.open() == 0){
+ boolean toggled = dialogbox.getToggleState();
+ CDebugUIPlugin.getDefault().getPreferenceStore().setValue(ICDebugPreferenceConstants.PREF_SHOW_ERROR_REVERSE_TRACE_METHOD_NOT_AVAILABLE, !toggled);
+ }
+ }
+ // Request re-evaluation of property "org.eclipse.cdt.debug.ui.isReverseDebuggingEnabled" to update
+ // visibility of reverse stepping commands.
+ IEvaluationService exprService = PlatformUI.getWorkbench().getService(IEvaluationService.class);
+ if (exprService != null) {
+ exprService.requestEvaluation("org.eclipse.cdt.debug.ui.isReverseDebuggingEnabled"); //$NON-NLS-1$
+ }
+ // Refresh reverse toggle commands with the new state of reverse enabled.
+ // This is in order to keep multiple toggle actions in UI in sync.
+ ICommandService commandService = PlatformUI.getWorkbench().getService(ICommandService.class);
+ if (commandService != null) {
+ commandService.refreshElements(REVERSE_TOGGLE_COMMAND_ID, null);
+ }
+
+ return Status.OK_STATUS;
+ }
+ }.schedule();
}
@Override
- public void updateElement(UIElement element,
+ public void updateElement(UIElement element,
@SuppressWarnings("rawtypes") Map parameters) {
- // Make sure the toggle state reflects the actual state
- // We must check this, in case we have multiple launches
- // or if we re-launch (restart)
- if (fTargetAdapter != null && fTargetAdapter.toggleNeedsUpdating()){
- boolean toggled = fTargetAdapter.isReverseToggled(fActiveContext);
- element.setChecked(toggled);
+ if(fTargetAdapter != null && fTargetAdapter instanceof IChangeReverseMethodHandler){
+ ReverseTraceMethod reverseMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getTraceMethod(fActiveContext);
+ ICommandService commandService = PlatformUI.getWorkbench().getService(ICommandService.class);
+ if(reverseMethod != traceMethod){
+ lastTraceMethod = traceMethod;
+ traceMethod = reverseMethod;
+ }
+ try{
+ if (traceMethod != ReverseTraceMethod.STOP_TRACE && traceMethod != ReverseTraceMethod.FULL_TRACE) {
+ HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "UseHardTrace"); //$NON-NLS-1$
+ element.setTooltip("Toggle Hardware Trace"); //$NON-NLS-1$
+ element.setIcon(tracemethodOnImages[1]);
+ }
+ else if (traceMethod == ReverseTraceMethod.FULL_TRACE) {
+ HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "UseSoftTrace"); //$NON-NLS-1$
+ element.setTooltip("Toggle Software Trace"); //$NON-NLS-1$
+ element.setIcon(tracemethodOnImages[0]);
+ }
+ else {
+ element.setTooltip("Toggle Reverse Debugging"); //$NON-NLS-1$
+ if (lastTraceMethod != ReverseTraceMethod.STOP_TRACE && lastTraceMethod != ReverseTraceMethod.FULL_TRACE) {
+ HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "UseHardTrace"); //$NON-NLS-1$
+ element.setIcon(tracemethodOffImages[1]);
+ }
+ else if (lastTraceMethod == ReverseTraceMethod.FULL_TRACE) {
+ HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "UseSoftTrace"); //$NON-NLS-1$
+ element.setIcon(tracemethodOffImages[0]);
+ }
+ else {
+ element.setIcon(tracemethodDefaultImage);
+ }
+ }
+ }
+ catch(ExecutionException e){
+ // Do nothing
+ }
}
}
}
\ No newline at end of file
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java
index dae971923f3..031735a7217 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java
@@ -7,6 +7,7 @@
*
* Contributors:
* QNX Software Systems - Initial API and implementation
+ * Intel Corporation - Added Reverse Debugging BTrace support
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.preferences;
@@ -50,4 +51,9 @@ public interface ICDebugPreferenceConstants {
* Boolean preference controlling whether the disassembly editor is be activated if the source file can't be found.
*/
public static final String PREF_DISASM_OPEN_SOURCE_NOT_FOUND = ICDebugUIConstants.PLUGIN_ID + ".disassembly.openSourceNotFound"; //$NON-NLS-1$
+
+ /**
+ * Boolean preference controlling whether to display error dialog box when trace method is not available.
+ */
+ public static final String PREF_SHOW_ERROR_REVERSE_TRACE_METHOD_NOT_AVAILABLE = ICDebugUIConstants.PLUGIN_ID + ".reversedebugpref.tracemethodNotAvailable"; //$NON-NLS-1$
}
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.properties b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.properties
index 6b560e7cce8..eb63be1d7ef 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.properties
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.properties
@@ -11,11 +11,13 @@
# Jens Elmenthaler (Verigy) - Added Full GDB pretty-printing support (bug 302121)
# Vladimir Prus (Mentor Graphics) - OS Resources view (bug 360314)
# Marc Khouzam (Ericsson) - Support for dynamic printf (bug 400628)
+# Intel Corporation - Added Reverse Debugging BTrace support
###############################################################################
pluginName=GDB DSF Debugger Integration UI
providerName=Eclipse CDT
gdbPreferencePage.name = GDB
+reverseDebugPreferences.name = Reverse Debugging Preferences
launchTab.main.name=Main
launchTab.arguments.name=Arguments
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml
index 05760331fee..f9ab297116b 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml
@@ -499,6 +499,12 @@
id="org.eclipse.cdt.dsf.gdb.ui.preferences.TracepointActionsPreferencePage"
name="%tracepointActionsPrefPage.name">
+
+
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbSessionAdapters.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbSessionAdapters.java
index f60b0aa4963..08df30bf374 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbSessionAdapters.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbSessionAdapters.java
@@ -8,6 +8,7 @@
* Contributors:
* Marc Khouzam (Ericsson) - initial API and implementation
* Mikhail Khodjaiants (Mentor Graphics) - initial API and implementation
+ * Intel Corporation - Added Reverse Debugging BTrace support
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.internal.ui;
@@ -312,7 +313,7 @@ public class GdbSessionAdapters {
if (IRefreshAllTarget.class.equals(adapterType)) {
return (T)new DefaultRefreshAllTarget();
}
- if (IReverseToggleHandler.class.equals(adapterType)) {
+ if (IReverseToggleHandler.class.equals(adapterType)) {
return (T)new GdbReverseToggleCommand(session);
}
if (IStartTracingHandler.class.equals(adapterType)) {
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbReverseToggleCommand.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbReverseToggleCommand.java
index 245b4f5c1d5..38097af3832 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbReverseToggleCommand.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbReverseToggleCommand.java
@@ -8,13 +8,14 @@
* Contributors:
* Ericsson - initial API and implementation
* Marc Khouzam (Ericsson) - Listen for IReverseModeChangedDMEvent (Bug 399163)
+ * Intel Corporation - Added Reverse Debugging BTrace support
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.internal.ui.commands;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.RejectedExecutionException;
-import org.eclipse.cdt.debug.core.model.IReverseToggleHandler;
+import org.eclipse.cdt.debug.core.model.IChangeReverseMethodHandler;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
@@ -24,9 +25,12 @@ import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.service.IRunControl;
import org.eclipse.cdt.dsf.debug.service.IRunControl.IExecutionDMContext;
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext;
+import org.eclipse.cdt.dsf.gdb.IGdbDebugPreferenceConstants;
+import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin;
import org.eclipse.cdt.dsf.gdb.service.IReverseRunControl;
import org.eclipse.cdt.dsf.gdb.service.IReverseRunControl.IReverseModeChangedDMEvent;
+import org.eclipse.cdt.dsf.gdb.service.IReverseRunControl2;
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
import org.eclipse.cdt.dsf.service.DsfSession;
@@ -34,6 +38,7 @@ 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.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.IRequest;
import org.eclipse.debug.core.commands.AbstractDebugCommand;
@@ -49,15 +54,18 @@ import org.eclipse.ui.services.IEvaluationService;
*
* @since 2.1
*/
-public class GdbReverseToggleCommand extends AbstractDebugCommand implements IReverseToggleHandler {
+public class GdbReverseToggleCommand extends AbstractDebugCommand implements IChangeReverseMethodHandler {
private final DsfExecutor fExecutor;
private final DsfServicesTracker fTracker;
private final DsfSession fSession;
+
+ private ReverseTraceMethod fTraceMethod = null;
public GdbReverseToggleCommand(DsfSession session) {
fExecutor = session.getExecutor();
fTracker = new DsfServicesTracker(GdbUIPlugin.getBundleContext(), session.getId());
fSession = session;
+ fTraceMethod = ReverseTraceMethod.STOP_TRACE;
try {
fExecutor.execute(new DsfRunnable() {
@Override
@@ -83,7 +91,7 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements IRe
}
@Override
- protected void doExecute(Object[] targets, IProgressMonitor monitor, IRequest request) throws CoreException {
+ protected void doExecute(Object[] targets, IProgressMonitor monitor, final IRequest request) throws CoreException {
if (targets.length != 1) {
return;
}
@@ -97,18 +105,57 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements IRe
Query