From 7d75673d862d5b955ccf6511a6ed5d52ee5f7cbd Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Thu, 10 Jun 2004 02:51:50 +0000 Subject: [PATCH] Fix for PR 66338 * cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/Condition.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java --- debug/org.eclipse.cdt.debug.mi.core/ChangeLog | 7 ++++ .../debug/mi/core/cdi/BreakpointManager.java | 19 +++++----- .../cdt/debug/mi/core/cdi/Condition.java | 2 +- .../cdt/debug/mi/core/cdi/EventManager.java | 5 +-- .../debug/mi/core/cdi/model/Breakpoint.java | 35 ++++++++++++------- 5 files changed, 43 insertions(+), 25 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog index aaae3804bf1..e1ddf21b760 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog @@ -1,3 +1,10 @@ +2004-06-09 Alain Magloire + Fix for PR 66338 + * cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java + * cdi/org/eclipse/cdt/debug/mi/core/cdi/Condition.java + * cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java + * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java + 2004-06-09 Alain Magloire Keep the breakpoint disable when doing diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java index 9cf224a5337..2ef33087ab0 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java @@ -403,16 +403,15 @@ public class BreakpointManager extends Manager implements ICDIBreakpointManager } catch (CDIException e) { if (!deferred) { throw e; - } else { - Session session = (Session)getSession(); - ICDISharedLibraryManager sharedMgr = session.getSharedLibraryManager(); - if (sharedMgr instanceof SharedLibraryManager) { - SharedLibraryManager mgr = (SharedLibraryManager)sharedMgr; - if (mgr.isDeferredBreakpoint()) { - deferredList.add(bkpt); - } else { - throw e; - } + } + Session session = (Session)getSession(); + ICDISharedLibraryManager sharedMgr = session.getSharedLibraryManager(); + if (sharedMgr instanceof SharedLibraryManager) { + SharedLibraryManager mgr = (SharedLibraryManager)sharedMgr; + if (mgr.isDeferredBreakpoint()) { + deferredList.add(bkpt); + } else { + throw e; } } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/Condition.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/Condition.java index 7eb5e85821f..ceb7222a599 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/Condition.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/Condition.java @@ -15,7 +15,7 @@ public class Condition implements ICDICondition { public Condition(int ignore, String exp) { ignoreCount = ignore; - expression = exp; + expression = (exp == null) ? new String() : exp; } /** diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java index 78641dd3aea..8052b8543ce 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java @@ -358,12 +358,13 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs if (bpoints[i] instanceof Breakpoint) { Breakpoint bkpt = (Breakpoint)bpoints[i]; try { + boolean enable = bkpt.isEnabled(); bpMgr.setLocationBreakpoint(bkpt); bpMgr.deleteFromDeferredList(bkpt); bpMgr.addToBreakpointList(bkpt); - // If the breakpoint was disable + // If the breakpoint was disable in the IDE // install it but keep it disable - if (!bkpt.isEnabled()) { + if (!enable) { bpMgr.disableBreakpoint(bkpt); } eventList.add(new MIBreakpointCreatedEvent(bkpt.getMIBreakpoint().getNumber())); diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java index 9eb28458d57..1b80da031d1 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java @@ -24,6 +24,7 @@ public class Breakpoint extends CObject implements ICDILocationBreakpoint { BreakpointManager mgr; int type; String tid; + boolean enable; public Breakpoint(BreakpointManager m, int kind, ICDILocation loc, ICDICondition cond, String threadId) { super(m.getSession().getCurrentTarget()); @@ -32,6 +33,7 @@ public class Breakpoint extends CObject implements ICDILocationBreakpoint { location = loc; condition = cond; tid = threadId; + enable = true; } public Breakpoint(BreakpointManager m, MIBreakpoint miBreak) { @@ -46,9 +48,9 @@ public class Breakpoint extends CObject implements ICDILocationBreakpoint { public void setMIBreakpoint(MIBreakpoint newMIBreakpoint) { miBreakpoint = newMIBreakpoint; - // Force the reset of the location and condition. - location = null; + // Force the reset to use GDB's values. condition = null; + location = null; } public boolean isDeferred() { @@ -60,8 +62,9 @@ public class Breakpoint extends CObject implements ICDILocationBreakpoint { */ public ICDICondition getCondition() throws CDIException { if (condition == null) { - if (miBreakpoint != null) + if (miBreakpoint != null) { condition = new Condition(miBreakpoint.getIgnoreCount(), miBreakpoint.getCondition()); + } } return condition; } @@ -70,8 +73,9 @@ public class Breakpoint extends CObject implements ICDILocationBreakpoint { * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#getThreadId() */ public String getThreadId() throws CDIException { - if (miBreakpoint != null) + if (miBreakpoint != null) { return miBreakpoint.getThreadId(); + } return tid; } @@ -79,17 +83,19 @@ public class Breakpoint extends CObject implements ICDILocationBreakpoint { * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#isEnabled() */ public boolean isEnabled() throws CDIException { - if (miBreakpoint != null) + if (miBreakpoint != null) { return miBreakpoint.isEnabled(); - return false; + } + return enable; } /** * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#isHardware() */ public boolean isHardware() { - if (miBreakpoint != null) + if (miBreakpoint != null) { return miBreakpoint.isHardware(); + } return (type == ICDIBreakpoint.HARDWARE); } @@ -97,8 +103,9 @@ public class Breakpoint extends CObject implements ICDILocationBreakpoint { * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#isTemporary() */ public boolean isTemporary() { - if (miBreakpoint != null) + if (miBreakpoint != null) { return miBreakpoint.isTemporary(); + } return (type == ICDIBreakpoint.TEMPORARY); } @@ -115,12 +122,15 @@ public class Breakpoint extends CObject implements ICDILocationBreakpoint { /** * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#setEnabled(boolean) */ - public void setEnabled(boolean enable) throws CDIException { - if (enable == false && isEnabled() == true) { + public void setEnabled(boolean on) throws CDIException { + if (miBreakpoint != null) { + if (on == false && isEnabled() == true) { mgr.disableBreakpoint(this); - } else if (enable == true && isEnabled() == false) { + } else if (on == true && isEnabled() == false) { mgr.enableBreakpoint(this); + } } + enable = on; } /** @@ -128,11 +138,12 @@ public class Breakpoint extends CObject implements ICDILocationBreakpoint { */ public ICDILocation getLocation() throws CDIException { if (location == null) { - if (miBreakpoint != null) + if (miBreakpoint != null) { location = new Location (miBreakpoint.getFile(), miBreakpoint.getFunction(), miBreakpoint.getLine(), miBreakpoint.getAddress()); + } } return location; }