From efa5f6a75f56e3db76f2a90a4a5654a7843da9b3 Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Tue, 5 Jul 2016 15:08:59 -0400 Subject: [PATCH] Bug 497349 - Reverse debug is always enabled when attaching to a process Change-Id: I3761e57fb625cab31e013676d3eda7f214496918 --- .../dsf/gdb/service/GDBProcesses_7_10.java | 54 ++++++++++--------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_10.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_10.java index 8ac149bace0..8803d83dec9 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_10.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_10.java @@ -56,30 +56,36 @@ public class GDBProcesses_7_10 extends GDBProcesses_7_4 { ILaunch launch = procCtx.getAdapter(ILaunch.class); if (launch != null) { try { - ICommandControlDMContext controlContext = DMContexts.getAncestorOfType(procCtx, ICommandControlDMContext.class); - String reverseMode = - launch.getLaunchConfiguration().getAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REVERSE_MODE, - IGDBLaunchConfigurationConstants.DEBUGGER_REVERSE_MODE_DEFAULT); - if (reverseMode.equals(IGDBLaunchConfigurationConstants.DEBUGGER_REVERSE_MODE_SOFTWARE)) { - reverseService.enableReverseMode(controlContext, ReverseDebugMethod.SOFTWARE, rm); - } - else if (reverseMode.equals(IGDBLaunchConfigurationConstants.DEBUGGER_REVERSE_MODE_HARDWARE)) { - String defaultValue = Platform.getPreferencesService().getString(GdbPlugin.PLUGIN_ID, - IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_HARDWARE, - IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_GDB_TRACE, null); - - ReverseDebugMethod traceMethod = ReverseDebugMethod.GDB_TRACE; - if (defaultValue.equals(IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_BRANCH_TRACE)) { - traceMethod = ReverseDebugMethod.BRANCH_TRACE; - } else if (defaultValue.equals(IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_PROCESSOR_TRACE)) { - traceMethod = ReverseDebugMethod.PROCESSOR_TRACE; - } - - reverseService.enableReverseMode(controlContext, traceMethod, rm); - } - else { - rm.done(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Unexpected Reverse debugging mode " + reverseMode, null)); //$NON-NLS-1$ - } + boolean reverseEnabled = + launch.getLaunchConfiguration().getAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REVERSE, + IGDBLaunchConfigurationConstants.DEBUGGER_REVERSE_DEFAULT); + if (reverseEnabled) { + ICommandControlDMContext controlContext = DMContexts.getAncestorOfType(procCtx, ICommandControlDMContext.class); + String reverseMode = + launch.getLaunchConfiguration().getAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REVERSE_MODE, + IGDBLaunchConfigurationConstants.DEBUGGER_REVERSE_MODE_DEFAULT); + if (reverseMode.equals(IGDBLaunchConfigurationConstants.DEBUGGER_REVERSE_MODE_SOFTWARE)) { + reverseService.enableReverseMode(controlContext, ReverseDebugMethod.SOFTWARE, rm); + } else if (reverseMode.equals(IGDBLaunchConfigurationConstants.DEBUGGER_REVERSE_MODE_HARDWARE)) { + String defaultValue = Platform.getPreferencesService().getString(GdbPlugin.PLUGIN_ID, + IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_HARDWARE, + IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_GDB_TRACE, null); + + ReverseDebugMethod traceMethod = ReverseDebugMethod.GDB_TRACE; + if (defaultValue.equals(IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_BRANCH_TRACE)) { + traceMethod = ReverseDebugMethod.BRANCH_TRACE; + } else if (defaultValue.equals(IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_PROCESSOR_TRACE)) { + traceMethod = ReverseDebugMethod.PROCESSOR_TRACE; + } + + reverseService.enableReverseMode(controlContext, traceMethod, rm); + } + else { + rm.done(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Unexpected Reverse debugging mode " + reverseMode, null)); //$NON-NLS-1$ + } + } else { + rm.done(); + } } catch (CoreException e) { // Ignore, just don't set reverse method rm.done();