From 07dcb970fab42e8af9e3bf87a1014a9bfefbcfc5 Mon Sep 17 00:00:00 2001 From: Alvaro Sanchez-Leon Date: Fri, 28 Nov 2014 17:04:03 -0500 Subject: [PATCH] Bug 442394 - Sometimes breakpoints set and immediately deleted when debugging with GDB Change-Id: I3d2e54c7ca65b0a7a83fff39b1eb4b02b939493d Reviewed-on: https://git.eclipse.org/r/37310 Tested-by: Hudson CI Reviewed-by: Elena Laskavaia Reviewed-by: Marc Khouzam Tested-by: Marc Khouzam --- .../dsf/mi/service/MIBreakpointsManager.java | 34 +++++++------------ 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java index 059841aba77..3f852986349 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java @@ -15,6 +15,7 @@ * Marc Khouzam (Ericsson) - Generalize thread filtering logic (Bug 431986) * Marc Khouzam (Ericsson) - Accept multiple calls to startTrackingBreakpoints (Bug 389945) * Marc Khouzam (Ericsson) - Support for dynamic printf (Bug 400628) + * Alvaro Sanchez-Leon (Ericcson) - Sometimes breakpoints set and immediately deleted when debugging with GDB (Bug 442394) *******************************************************************************/ package org.eclipse.cdt.dsf.mi.service; @@ -355,28 +356,19 @@ public class MIBreakpointsManager extends AbstractDsfService implements IBreakpo * must have the proper IBreakpointsTargetDMContext in its hierarchy. * * @since 4.6 - */ - public void startTrackingBpForProcess(final IContainerDMContext containerDmc, final RequestMonitor rm) { - final IBreakpointsTargetDMContext targetBpDmc = DMContexts.getAncestorOfType(containerDmc, IBreakpointsTargetDMContext.class); - - startTrackingBreakpoints(targetBpDmc, new ImmediateRequestMonitor(rm) { - @Override - protected void handleSuccess() { - final Map> platformBPs = fPlatformBPs.get(targetBpDmc); - if (platformBPs == null) { - assert false; - rm.done(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Missing bp target context", null)); //$NON-NLS-1$ - return; - } + */ + public void startTrackingBpForProcess(final IContainerDMContext containerDmc, final RequestMonitor rm) { + final IBreakpointsTargetDMContext targetBpDmc = DMContexts.getAncestorOfType(containerDmc, + IBreakpointsTargetDMContext.class); - for (final ICBreakpoint breakpoint : platformBPs.keySet()) { - setTargetFilter(breakpoint, containerDmc); - } - - rm.done(); - } - }); - } + IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(fDebugModelId); + for (IBreakpoint breakpoint : breakpoints) { + if (breakpoint instanceof ICBreakpoint && supportsBreakpoint(breakpoint)) { + setTargetFilter((ICBreakpoint) breakpoint, containerDmc); + } + } + startTrackingBreakpoints(targetBpDmc, rm); + } //------------------------------------------------------------------------- // startTrackingBreakpoints