From 98a578cf9460555279db69eface8bf59cdbf50db Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Tue, 25 Apr 2017 14:41:01 +0100 Subject: [PATCH] Bug 515768: Don't install BPs that are entirely filtered This check already existed for modifying breakpoints, but didn't exist for creating new breakpoints or installing initial breakpoints. Change-Id: I5ff5ce0b3ac603ccffa49bd98d60f7202505a7bd Signed-off-by: Jonah Graham --- .../dsf/mi/service/MIBreakpointsManager.java | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 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 b1f76e42b67..c8bedc068a0 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 @@ -494,11 +494,14 @@ public class MIBreakpointsManager extends AbstractDsfService implements IBreakpo IBreakpoint[] breakpoints = fBreakpointManager.getBreakpoints(fDebugModelId); for (IBreakpoint breakpoint : breakpoints) { if (supportsBreakpoint(breakpoint)) { - Map attributes = breakpoint.getMarker().getAttributes(); - attributes.put(ATTR_DEBUGGER_PATH, NULL_STRING); - attributes.put(ATTR_THREAD_FILTER, extractThreads(dmc, (ICBreakpoint) breakpoint)); - attributes.put(ATTR_THREAD_ID, NULL_STRING); - platformBPs.put((ICBreakpoint) breakpoint, attributes); + boolean filtered = isBreakpointEntirelyFiltered(dmc, (ICBreakpoint) breakpoint); + if (!filtered) { + Map attributes = breakpoint.getMarker().getAttributes(); + attributes.put(ATTR_DEBUGGER_PATH, NULL_STRING); + attributes.put(ATTR_THREAD_FILTER, extractThreads(dmc, (ICBreakpoint) breakpoint)); + attributes.put(ATTR_THREAD_ID, NULL_STRING); + platformBPs.put((ICBreakpoint) breakpoint, attributes); + } } } } catch (CoreException e) { @@ -1343,16 +1346,21 @@ public class MIBreakpointsManager extends AbstractDsfService implements IBreakpo }; countingRm.setDoneCount(fPlatformToAttributesMaps.size()); - for (final IBreakpointsTargetDMContext dmc : fPlatformToAttributesMaps.keySet()) { - determineDebuggerPath(dmc, attrs, - new RequestMonitor(getExecutor(), countingRm) { - @Override - protected void handleSuccess() { - installBreakpoint(dmc, (ICBreakpoint) breakpoint, - attrs, countingRm); - } - }); - } + for (final IBreakpointsTargetDMContext dmc : fPlatformToAttributesMaps.keySet()) { + boolean filtered = isBreakpointEntirelyFiltered(dmc, (ICBreakpoint)breakpoint); + if (!filtered) { + determineDebuggerPath(dmc, attrs, + new RequestMonitor(getExecutor(), countingRm) { + @Override + protected void handleSuccess() { + installBreakpoint(dmc, (ICBreakpoint) breakpoint, + attrs, countingRm); + } + }); + } else { + countingRm.done(); + } + } } });