Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java25
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;
}

Back to the top