From:
cdt-debug-dev-bounces@xxxxxxxxxxx [mailto:cdt-debug-dev-bounces@xxxxxxxxxxx] On Behalf Of Ling.5.Wang@xxxxxxxxx
Sent: Wednesday, May 30, 2007 5:39
PM
To: cdt-debug-dev@xxxxxxxxxxx
Subject: [cdt-debug-dev] remove a
thread from UI after terminating/disconnecting a process
Hi,
This is an issue found in CDT debugger but it's more related
to platform debugger code. I know some platform debugger gurus like Darin are
on the list, so I'm sending this here.
I see this bug in our Nokia CDT-based debugger, but it's a
generic problem in any CDT debugger.
During a debug session with multiple processes
in Launch View, I select a process (target) and click the
"Disconnect" command, then the process is shown as
"disconnected" in Launch View but its threads and stackframes
remain in the view, which is not good.
I can work around the bug by changing CDT code,
but I think a better fix should be done in the platform.
Here's the code of
org.eclipse.debug.internal.ui.viewers.update.ThreadEventHandler.handleTerminate()
protected void handleTerminate(DebugEvent
event) {
IThread thread = (IThread) event.getSource();
IDebugTarget target = thread.getDebugTarget();
// ignore
thread termination if target is terminated/disconnected
if
(!(target.isTerminated() || target.isDisconnected())) {
fireDeltaAndClearTopFrame(thread,
IModelDelta.REMOVED);
}
}
The code in red & italics does not make much sense
to me. When a thread is terminated, why shouldn't we remove it from the UI
if the owning process is terminated/disconnected ? Why leave the zombie
there ?
In CDT (e.g.
org.eclipse.cdt.debug.internal.core.model.CDebugTarget.handleDisconnectedEvent()),
when a target/process is terminated/disconnected, the target is marked
terminated/disconnected and TerminateEvent's are fired for all threads in the
processs. As the events are handled asynchronously by the ThreadEventHandler.handleTerminate(),
the condition check in red may become true and thus the threads are not removed
from UI.
So is it ok to remove the condition check ?
Regards.
-- Ling