diff options
Diffstat (limited to 'debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java')
-rw-r--r-- | debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java | 25 |
1 files changed, 22 insertions, 3 deletions
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 45c3a7d1c4d..f2decae7549 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 @@ -184,6 +184,7 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs } } } else if (miEvent instanceof MISharedLibUnloadedEvent) { + processSharedLibUnloadedEvent((MISharedLibUnloadedEvent)miEvent); cdiList.add(new DestroyedEvent(session, (MISharedLibUnloadedEvent)miEvent)); } else if (miEvent instanceof MIVarDeletedEvent) { cdiList.add(new DestroyedEvent(session, (MIVarDeletedEvent)miEvent)); @@ -330,6 +331,27 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs } /** + * When a shared library is unloading we could possibly have stale libraries. + * GDB does no react well to this: see PR + * https://bugs.eclipse.org/bugs/show_bug.cgi?id=74496 + * @param unLoaded + * @return + */ + boolean processSharedLibUnloadedEvent(MISharedLibUnloadedEvent unLoaded) { + Session session = (Session)getSession(); + MISession miSession = unLoaded.getMISession(); + Target target = session.getTarget(miSession); + ExpressionManager expMgr = session.getExpressionManager(); + VariableManager varMgr = session.getVariableManager(); + try { + expMgr.destroyAllExpressions(target); + varMgr.destroyAllVariables(target); + } catch (CDIException e) { + } + return false; + } + + /** * If the deferredBreakpoint processing is set * catch the shared-lib-event go to the last known * stackframe and try to finish. @@ -509,9 +531,6 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs MIBreakpointHitEvent bpEvent = (MIBreakpointHitEvent)stopped; BreakpointManager bpMgr = session.getBreakpointManager(); int bpNo = bpEvent.getNumber(); - //if (bpMgr.isExceptionBreakpoint(bpNo)) { - - //} } return false; } |