diff --git a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog index eaa155987dc..ef987df3fd4 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog @@ -1,3 +1,14 @@ +2006-04-12 Mikhail Khodjaiants + Bug 119740: allow to specify only a subset of shared objects that we want symbols to be loaded for. + Support for deferred breakpoints. + * BreakpointManager.java + * EventManager.java + * SharedLibraryManager.java + * Target.java + * GDBCDIDebugger.java + * GDBCDIDebugger2.java + * GDBDebugger.java + 2006-04-10 Mikhail Khodjaiants Bug 119740: allow to specify only a subset of shared objects that we want symbols to be loaded for. * SharedLibraryManager.java 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 4e3ecdb1ae7..e39088b81f2 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 @@ -649,7 +649,7 @@ public class BreakpointManager extends Manager { } Session session = (Session)target.getSession(); SharedLibraryManager sharedMgr = session.getSharedLibraryManager(); - if (sharedMgr.isDeferredBreakpoint()) { + if (sharedMgr.isDeferredBreakpoint(target)) { List dList = (List)deferredMap.get(target); if (dList == null) { dList = Collections.synchronizedList(new ArrayList()); 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 ef703c53ee6..54f8a6715c9 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 @@ -371,7 +371,7 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs Target currentTarget = session.getTarget(miSession); SharedLibraryManager mgr = session.getSharedLibraryManager(); - if (mgr.isDeferredBreakpoint()) { + if (mgr.isDeferredBreakpoint(currentTarget)) { if (stopped instanceof MISharedLibEvent) { // Check if we have a new library loaded try { diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SharedLibraryManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SharedLibraryManager.java index 077ed639a30..b856ca938c7 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SharedLibraryManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SharedLibraryManager.java @@ -235,12 +235,12 @@ public class SharedLibraryManager extends Manager { return null; } - public void setDeferredBreakpoint (boolean set) { - isDeferred = set; + public void setDeferredBreakpoint(Target target, boolean set) { + target.deferBreakpoints( set ); } - public boolean isDeferredBreakpoint() { - return isDeferred; + public boolean isDeferredBreakpoint(Target target) { + return target.areBreakpointsDeferred(); } public void setAutoLoadSymbols(Target target, boolean set) throws CDIException { diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java index 66debd39145..586d5f9eae8 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java @@ -95,6 +95,7 @@ public class Target extends SessionObject implements ICDITarget { int currentThreadId; String fEndian = null; boolean suspended = true; + boolean deferBreakpoints = true; public Target(Session s, MISession mi) { super(s); @@ -1123,5 +1124,11 @@ public class Target extends SessionObject implements ICDITarget { return null; } + public void deferBreakpoints( boolean defer ) { + this.deferBreakpoints = defer; + } + public boolean areBreakpointsDeferred() { + return this.deferBreakpoints; + } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger.java index 42142874e25..5a81155be99 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger.java @@ -211,8 +211,8 @@ public class GDBCDIDebugger implements ICDIDebugger { // If the user explicitly set stopOnSolibEvents well it probably // means that they wanted to see those events so do no do deferred breakpoints. if (autolib && !stopOnSolibEvents) { - sharedMgr.setDeferredBreakpoint(true); sharedMgr.setStopOnSolibEvents(target, true); + sharedMgr.setDeferredBreakpoint(target, true); } } catch (CDIException e) { // Ignore this error diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger2.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger2.java index bf2e899bfa1..b86fa9c80e1 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger2.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger2.java @@ -195,7 +195,7 @@ public class GDBCDIDebugger2 extends AbstractGDBCDIDebugger { try { sharedMgr.setAutoLoadSymbols( target, autolib ); sharedMgr.setStopOnSolibEvents( target, stopOnSolibEvents ); - sharedMgr.setDeferredBreakpoint( false ); + sharedMgr.setDeferredBreakpoint( target, false ); // The idea is that if the user set autolib, by default // we provide with the capability of deferred breakpoints // And we set setStopOnSolib events for them(but they should not see those things. @@ -203,8 +203,8 @@ public class GDBCDIDebugger2 extends AbstractGDBCDIDebugger { // If the user explicitly set stopOnSolibEvents well it probably // means that they wanted to see those events so do no do deferred breakpoints. if ( autolib && !stopOnSolibEvents ) { - sharedMgr.setDeferredBreakpoint( true ); sharedMgr.setStopOnSolibEvents( target, true ); + sharedMgr.setDeferredBreakpoint( target, true ); } } catch( CDIException e ) { @@ -224,6 +224,8 @@ public class GDBCDIDebugger2 extends AbstractGDBCDIDebugger { for ( int j = 0; j < autoSolibs.length; ++j ) libs.add( new File( autoSolibs[j].getName() ) ); sharedMgr.autoLoadSymbols( (File[])libs.toArray( new File[libs.size()] ) ); + if ( !autolib && !stopOnSolibEvents ) + sharedMgr.setDeferredBreakpoint( target, libs.size() > 0 ); } } catch( CDIException e ) { diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBDebugger.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBDebugger.java index 8f6633c1ba0..256c2cf3658 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBDebugger.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBDebugger.java @@ -49,8 +49,8 @@ public class GDBDebugger implements ICDebugger { // If the user explicitly set stopOnSolibEvents well it probably // means that they wanted to see those events so do no do deferred breakpoints. if (autolib && !stopOnSolibEvents) { - mgr.setDeferredBreakpoint(true); mgr.setStopOnSolibEvents(target, true); + mgr.setDeferredBreakpoint(target, true); } } catch (CDIException e) { // Ignore this error