mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 14:42:11 +02:00
Bug 488661 - Moving the last trace method to GdbReverseToggleCommand
This patch solves Bug 488661 by moving last trace method to GdbReverseToggleCommand. Since it is instantiated on a per session basis. Change-Id: Idafa196c7af36373ca08d5fc7de63024fe824c2b Signed-off-by: raddepal <ravitheja.addepally@intel.com>
This commit is contained in:
parent
16b3fbcfd6
commit
7a73b0035f
3 changed files with 31 additions and 19 deletions
|
@ -29,4 +29,6 @@ public interface IChangeReverseMethodHandler extends IReverseToggleHandler, IDeb
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
ReverseTraceMethod getTraceMethod(Object context);
|
ReverseTraceMethod getTraceMethod(Object context);
|
||||||
|
|
||||||
|
ReverseTraceMethod getLastTraceMethod(Object context);
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,8 +56,6 @@ import org.osgi.framework.Bundle;
|
||||||
* @since 7.0
|
* @since 7.0
|
||||||
*/
|
*/
|
||||||
public class ReverseToggleCommandHandler extends DebugCommandHandler implements IDebugContextListener, IElementUpdater {
|
public class ReverseToggleCommandHandler extends DebugCommandHandler implements IDebugContextListener, IElementUpdater {
|
||||||
private ReverseTraceMethod fTraceMethod;
|
|
||||||
private ReverseTraceMethod fLastTraceMethod;
|
|
||||||
|
|
||||||
private static final ImageDescriptor REVERSE_TOGGLE_DEFAULT_IMAGE = getImageDescriptor("icons/obj16/reverse_toggle.gif"); //$NON-NLS-1$
|
private static final ImageDescriptor REVERSE_TOGGLE_DEFAULT_IMAGE = getImageDescriptor("icons/obj16/reverse_toggle.gif"); //$NON-NLS-1$
|
||||||
private static final ImageDescriptor REVERSE_TOGGLE_SOFTWARE_ON_IMAGE = getImageDescriptor("icons/obj16/reverse_toggle_sw_on.png"); //$NON-NLS-1$
|
private static final ImageDescriptor REVERSE_TOGGLE_SOFTWARE_ON_IMAGE = getImageDescriptor("icons/obj16/reverse_toggle_sw_on.png"); //$NON-NLS-1$
|
||||||
|
@ -109,8 +107,6 @@ public class ReverseToggleCommandHandler extends DebugCommandHandler implements
|
||||||
// This can happen if we activate the action set after the launch.
|
// This can happen if we activate the action set after the launch.
|
||||||
refresh(fContextService.getActiveContext());
|
refresh(fContextService.getActiveContext());
|
||||||
|
|
||||||
fTraceMethod = ReverseTraceMethod.STOP_TRACE;
|
|
||||||
fLastTraceMethod = ReverseTraceMethod.STOP_TRACE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -207,9 +203,10 @@ public class ReverseToggleCommandHandler extends DebugCommandHandler implements
|
||||||
// Disable tracing
|
// Disable tracing
|
||||||
if (fTargetAdapter != null && fTargetAdapter instanceof IChangeReverseMethodHandler) {
|
if (fTargetAdapter != null && fTargetAdapter instanceof IChangeReverseMethodHandler) {
|
||||||
if (fTargetAdapter.toggleNeedsUpdating()) {
|
if (fTargetAdapter.toggleNeedsUpdating()) {
|
||||||
|
ReverseTraceMethod LastTraceMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getLastTraceMethod(fActiveContext);
|
||||||
ReverseTraceMethod currMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getTraceMethod(fActiveContext);
|
ReverseTraceMethod currMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getTraceMethod(fActiveContext);
|
||||||
if (currMethod == ReverseTraceMethod.STOP_TRACE) {
|
if (currMethod == ReverseTraceMethod.STOP_TRACE) {
|
||||||
if (fLastTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
|
if (LastTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
|
||||||
traceMethod = ReverseTraceMethod.HARDWARE_TRACE;
|
traceMethod = ReverseTraceMethod.HARDWARE_TRACE;
|
||||||
} else {
|
} else {
|
||||||
traceMethod = ReverseTraceMethod.FULL_TRACE;
|
traceMethod = ReverseTraceMethod.FULL_TRACE;
|
||||||
|
@ -273,26 +270,23 @@ public class ReverseToggleCommandHandler extends DebugCommandHandler implements
|
||||||
@SuppressWarnings("rawtypes") Map parameters) {
|
@SuppressWarnings("rawtypes") Map parameters) {
|
||||||
if (fTargetAdapter != null && fTargetAdapter instanceof IChangeReverseMethodHandler) {
|
if (fTargetAdapter != null && fTargetAdapter instanceof IChangeReverseMethodHandler) {
|
||||||
ReverseTraceMethod reverseMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getTraceMethod(fActiveContext);
|
ReverseTraceMethod reverseMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getTraceMethod(fActiveContext);
|
||||||
|
ReverseTraceMethod LastTraceMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getLastTraceMethod(fActiveContext);
|
||||||
ICommandService commandService = PlatformUI.getWorkbench().getService(ICommandService.class);
|
ICommandService commandService = PlatformUI.getWorkbench().getService(ICommandService.class);
|
||||||
if (reverseMethod != fTraceMethod) {
|
|
||||||
fLastTraceMethod = fTraceMethod;
|
|
||||||
fTraceMethod = reverseMethod;
|
|
||||||
}
|
|
||||||
try{
|
try{
|
||||||
if (fTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
|
if (reverseMethod == ReverseTraceMethod.HARDWARE_TRACE) {
|
||||||
HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "UseHardTrace"); //$NON-NLS-1$
|
HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "UseHardTrace"); //$NON-NLS-1$
|
||||||
element.setTooltip(Messages.ReverseDebugging_ToggleHardwareTrace);
|
element.setTooltip(Messages.ReverseDebugging_ToggleHardwareTrace);
|
||||||
element.setIcon(REVERSE_TOGGLE_HARDWARE_ON_IMAGE);
|
element.setIcon(REVERSE_TOGGLE_HARDWARE_ON_IMAGE);
|
||||||
} else if (fTraceMethod == ReverseTraceMethod.FULL_TRACE) {
|
} else if (reverseMethod == ReverseTraceMethod.FULL_TRACE) {
|
||||||
HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "UseSoftTrace"); //$NON-NLS-1$
|
HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "UseSoftTrace"); //$NON-NLS-1$
|
||||||
element.setTooltip(Messages.ReverseDebugging_ToggleSoftwareTrace);
|
element.setTooltip(Messages.ReverseDebugging_ToggleSoftwareTrace);
|
||||||
element.setIcon(REVERSE_TOGGLE_SOFTWARE_ON_IMAGE);
|
element.setIcon(REVERSE_TOGGLE_SOFTWARE_ON_IMAGE);
|
||||||
} else {
|
} else {
|
||||||
element.setTooltip(Messages.ReverseDebugging_ToggleReverseDebugging);
|
element.setTooltip(Messages.ReverseDebugging_ToggleReverseDebugging);
|
||||||
HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "TraceOff"); //$NON-NLS-1$
|
HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "TraceOff"); //$NON-NLS-1$
|
||||||
if (fLastTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
|
if (LastTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
|
||||||
element.setIcon(REVERSE_TOGGLE_HARDWARE_OFF_IMAGE);
|
element.setIcon(REVERSE_TOGGLE_HARDWARE_OFF_IMAGE);
|
||||||
} else if (fLastTraceMethod == ReverseTraceMethod.FULL_TRACE) {
|
} else if (LastTraceMethod == ReverseTraceMethod.FULL_TRACE) {
|
||||||
element.setIcon(REVERSE_TOGGLE_SOFTWARE_OFF_IMAGE);
|
element.setIcon(REVERSE_TOGGLE_SOFTWARE_OFF_IMAGE);
|
||||||
} else {
|
} else {
|
||||||
element.setIcon(REVERSE_TOGGLE_DEFAULT_IMAGE);
|
element.setIcon(REVERSE_TOGGLE_DEFAULT_IMAGE);
|
||||||
|
|
|
@ -60,12 +60,17 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements ICh
|
||||||
private final DsfSession fSession;
|
private final DsfSession fSession;
|
||||||
|
|
||||||
private ReverseTraceMethod fTraceMethod = null;
|
private ReverseTraceMethod fTraceMethod = null;
|
||||||
|
private ReverseTraceMethod fLastTraceMethod = null;
|
||||||
|
private ReverseTraceMethod fNextTraceMethod = null;
|
||||||
|
|
||||||
public GdbReverseToggleCommand(DsfSession session) {
|
public GdbReverseToggleCommand(DsfSession session) {
|
||||||
fExecutor = session.getExecutor();
|
fExecutor = session.getExecutor();
|
||||||
fTracker = new DsfServicesTracker(GdbUIPlugin.getBundleContext(), session.getId());
|
fTracker = new DsfServicesTracker(GdbUIPlugin.getBundleContext(), session.getId());
|
||||||
fSession = session;
|
fSession = session;
|
||||||
fTraceMethod = ReverseTraceMethod.STOP_TRACE;
|
fTraceMethod = ReverseTraceMethod.STOP_TRACE;
|
||||||
|
fLastTraceMethod = ReverseTraceMethod.STOP_TRACE;
|
||||||
|
fNextTraceMethod = ReverseTraceMethod.STOP_TRACE;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
fExecutor.execute(new DsfRunnable() {
|
fExecutor.execute(new DsfRunnable() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -108,8 +113,8 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements ICh
|
||||||
final IReverseRunControl2 runControl = fTracker.getService(IReverseRunControl2.class);
|
final IReverseRunControl2 runControl = fTracker.getService(IReverseRunControl2.class);
|
||||||
|
|
||||||
if (runControl != null) {
|
if (runControl != null) {
|
||||||
ReverseTraceMethod traceMethod = fTraceMethod;
|
ReverseTraceMethod traceMethod = fNextTraceMethod;
|
||||||
if (fTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
|
if (fNextTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
|
||||||
String defaultValue = Platform.getPreferencesService().getString(GdbPlugin.PLUGIN_ID,
|
String defaultValue = Platform.getPreferencesService().getString(GdbPlugin.PLUGIN_ID,
|
||||||
IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_HARDWARE,
|
IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_HARDWARE,
|
||||||
IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_GDB_TRACE, null);
|
IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_GDB_TRACE, null);
|
||||||
|
@ -298,7 +303,7 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements ICh
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setTraceMethod(ReverseTraceMethod traceMethod) {
|
public void setTraceMethod(ReverseTraceMethod traceMethod) {
|
||||||
fTraceMethod = traceMethod;
|
fNextTraceMethod = traceMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -334,12 +339,18 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements ICh
|
||||||
try {
|
try {
|
||||||
fExecutor.execute(ReverseMethodQuery);
|
fExecutor.execute(ReverseMethodQuery);
|
||||||
ReverseTraceMethod returnedTrace = ReverseMethodQuery.get();
|
ReverseTraceMethod returnedTrace = ReverseMethodQuery.get();
|
||||||
|
ReverseTraceMethod currTrace = ReverseTraceMethod.INVALID;
|
||||||
if (returnedTrace == ReverseTraceMethod.INVALID)
|
if (returnedTrace == ReverseTraceMethod.INVALID)
|
||||||
return isReverseToggled(context) ? ReverseTraceMethod.FULL_TRACE : ReverseTraceMethod.STOP_TRACE ;
|
currTrace = isReverseToggled(context) ? ReverseTraceMethod.FULL_TRACE : ReverseTraceMethod.STOP_TRACE ;
|
||||||
else
|
else
|
||||||
return (returnedTrace == ReverseTraceMethod.BRANCH_TRACE ||
|
currTrace = (returnedTrace == ReverseTraceMethod.BRANCH_TRACE ||
|
||||||
returnedTrace == ReverseTraceMethod.PROCESSOR_TRACE ||
|
returnedTrace == ReverseTraceMethod.PROCESSOR_TRACE ||
|
||||||
returnedTrace == ReverseTraceMethod.GDB_TRACE ) ? ReverseTraceMethod.HARDWARE_TRACE : returnedTrace;
|
returnedTrace == ReverseTraceMethod.GDB_TRACE ) ? ReverseTraceMethod.HARDWARE_TRACE : returnedTrace;
|
||||||
|
if (currTrace != fTraceMethod) {
|
||||||
|
fLastTraceMethod = fTraceMethod;
|
||||||
|
fTraceMethod = currTrace;
|
||||||
|
}
|
||||||
|
return fTraceMethod;
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
} catch (ExecutionException e) {
|
} catch (ExecutionException e) {
|
||||||
} catch (RejectedExecutionException e) {
|
} catch (RejectedExecutionException e) {
|
||||||
|
@ -347,4 +358,9 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements ICh
|
||||||
|
|
||||||
return ReverseTraceMethod.STOP_TRACE;
|
return ReverseTraceMethod.STOP_TRACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReverseTraceMethod getLastTraceMethod(Object context) {
|
||||||
|
return fLastTraceMethod;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue