Fix for bug 48682: IThread.getBreakpoints() stubbed out.
diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog
index 2f408a9..9c22446 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-04-25 Mikhail Khodjaiants
Fix for bug 36909
* DisassemblyManager.java: check if the address of a stack frame is not 0;
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 8fb0616..6d0a9c0 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
@@ -241,6 +241,11 @@
private CRegisterManager fRegisterManager;
/**
+ * The suspension thread.
+ */
+ private ICDIThread fSuspensionThread;
+
+ /**
* Whether the debugger process is default.
*/
private boolean fIsDebuggerProcessDefault = false;
@@ -1365,6 +1370,7 @@
setCurrentStateId( IState.SUSPENDED );
ICDISessionObject reason = event.getReason();
setCurrentStateInfo( reason );
+ setSuspensionThread();
List newThreads = refreshThreads();
if ( event.getSource() instanceof ICDITarget )
{
@@ -2585,4 +2591,40 @@
{
return getRegisterManager().getRegisterGroups();
}
+
+ 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 = findBreakpoint( ((ICDIBreakpointHit)getCurrentStateInfo()).getBreakpoint() );
+ else if ( getCurrentStateInfo() instanceof ICDIWatchpointTrigger )
+ bkpt = findBreakpoint( ((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 b87ed9c..1dbc89c 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
@@ -411,7 +411,7 @@
*/
public IBreakpoint[] getBreakpoints()
{
- return null;
+ return ((CDebugTarget)getDebugTarget()).getThreadBreakpoints( this );
}
/* (non-Javadoc)