From 020ee8aeea031852ce59c32ac1ec8a41858d9a11 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Thu, 15 Jan 2004 22:09:35 +0000 Subject: [PATCH] Fix for bug 48682: IThread.getBreakpoints() stubbed out. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 5 +++ .../internal/core/model/CDebugTarget.java | 42 +++++++++++++++++++ .../debug/internal/core/model/CThread.java | 2 +- 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index 47b9f129166..6fbc90bb117 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,8 @@ +2004-01-15 Mikhail Khodjaiants + Fix for bug 48682: IThread.getBreakpoints() stubbed out. + * CDebugTarget.java + * CThread.java + 2003-12-23 Mikhail Khodjaiants Fix for bug 49294: Source file doesn't change when switching between stack frames. Do not use the breakpoint's markers for source lookup. diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java index 339edfe05c0..ab8da073175 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java @@ -249,6 +249,11 @@ public class CDebugTarget extends CDebugElement */ private boolean fIsDebuggerProcessDefault = false; + /** + * The suspension thread. + */ + private ICDIThread fSuspensionThread; + /** * The executable file. */ @@ -1227,6 +1232,7 @@ public class CDebugTarget extends CDebugElement ICDISessionObject reason = event.getReason(); setCurrentStateInfo( reason ); setRunningInfo( null ); + setSuspensionThread(); List newThreads = refreshThreads(); if ( event.getSource() instanceof ICDITarget ) { @@ -2232,4 +2238,40 @@ public class CDebugTarget extends CDebugElement if ( getBreakpointManager() != null ) getBreakpointManager().dispose(); } + + protected ICDIThread getSuspensionThread() + { + return fSuspensionThread; + } + + private void setSuspensionThread() + { + fSuspensionThread = null; + try + { + fSuspensionThread = getCDITarget().getCurrentThread(); + } + catch( CDIException e ) + { + // ignore + } + } + + protected IBreakpoint[] getThreadBreakpoints( CThread thread ) + { + List list = new ArrayList( 1 ); + if ( isSuspended() && thread != null && + getSuspensionThread() != null && + getSuspensionThread().equals( thread.getCDIThread() ) ) + { + IBreakpoint bkpt = null; + if ( getCurrentStateInfo() instanceof ICDIBreakpointHit ) + bkpt = getBreakpointManager().getBreakpoint( ((ICDIBreakpointHit)getCurrentStateInfo()).getBreakpoint() ); + else if ( getCurrentStateInfo() instanceof ICDIWatchpointTrigger ) + bkpt = getBreakpointManager().getBreakpoint( ((ICDIWatchpointTrigger)getCurrentStateInfo()).getWatchpoint() ); + if ( bkpt != null ) + list.add( bkpt ); + } + return (IBreakpoint[])list.toArray( new IBreakpoint[list.size()]); + } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java index 9a226c324a6..f85774c4284 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java @@ -409,7 +409,7 @@ public class CThread extends CDebugElement */ public IBreakpoint[] getBreakpoints() { - return null; + return ((CDebugTarget)getDebugTarget()).getThreadBreakpoints( this ); } /* (non-Javadoc)