diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index 0216550f45f..72badb1d8bf 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,12 @@ +2003-01-16 Mikhail Khodjaiants + Implementing the Shared Libraries view. + * ICSharedLibrary.java + * ICSharedLibraryManager.java + * CDebugElement.java + * CDebugTarget.java + * CSharedLibrary.java + * CSharedLibraryManager.java + 2003-01-16 Mikhail Khodjaiants * ICDILoadedEvent.java: Removed. diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java new file mode 100644 index 00000000000..d7b27200383 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java @@ -0,0 +1,28 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.core; + +import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; +import org.eclipse.cdt.debug.core.model.ICSharedLibrary; +import org.eclipse.core.runtime.IAdaptable; + +/** + * Enter type comment. + * + * @since: Jan 15, 2003 + */ +public interface ICSharedLibraryManager extends IAdaptable +{ + void sharedLibraryLoaded( ICDISharedLibrary library ); + + void sharedLibraryUnloaded( ICDISharedLibrary library ); + + void symbolsLoaded( ICDISharedLibrary library ); + + ICSharedLibrary[] getSharedLibraries(); + + void dispose(); +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java new file mode 100644 index 00000000000..c4676ad7c7a --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java @@ -0,0 +1,54 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.core.model; + +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.model.IDebugElement; + +/** + * Enter type comment. + * + * @since: Jan 15, 2003 + */ +public interface ICSharedLibrary extends IDebugElement +{ + /** + * Returns the name of shared library file. + * + * @return the name of shared library file + */ + String getFileName(); + + /** + * Returns the start address of this library. + * + * @return the start address of this library + */ + long getStartAddress(); + + /** + * Returns the end address of this library. + * + * @return the end address of this library + */ + long getEndAddress(); + + /** + * Returns whether the symbols of this library are read. + * + * @return whether the symbols of this library are read + */ + boolean areSymbolsLoaded(); + + /** + * Loads the library symbols. + * + * @throws DebugException if this method fails. Reasons include: + */ + void loadSymbols() throws DebugException; + + void dispose(); +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java new file mode 100644 index 00000000000..51c5ff9f57f --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java @@ -0,0 +1,136 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.core; + +import java.util.ArrayList; +import java.util.Iterator; + +import org.eclipse.cdt.debug.core.ICSharedLibraryManager; +import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; +import org.eclipse.cdt.debug.core.model.ICSharedLibrary; +import org.eclipse.cdt.debug.internal.core.model.CDebugTarget; +import org.eclipse.cdt.debug.internal.core.model.CSharedLibrary; +import org.eclipse.debug.core.DebugEvent; +import org.eclipse.debug.core.model.IDebugTarget; + +/** + * Enter type comment. + * + * @since: Jan 16, 2003 + */ +public class CSharedLibraryManager implements ICSharedLibraryManager +{ + private CDebugTarget fDebugTarget = null; + private ArrayList fSharedLibraries; + + /** + * Constructor for CSharedLibraryManager. + */ + public CSharedLibraryManager( CDebugTarget target ) + { + setDebugTarget( target ); + fSharedLibraries = new ArrayList( 5 ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSharedLibraryManager#sharedLibararyLoaded(ICDISharedLibrary) + */ + public synchronized void sharedLibraryLoaded( ICDISharedLibrary cdiLibrary ) + { + CSharedLibrary library = new CSharedLibrary( fDebugTarget, cdiLibrary ); + fSharedLibraries.add( library ); + library.fireCreationEvent(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSharedLibraryManager#sharedLibraryUnloaded(ICDISharedLibrary) + */ + public synchronized void sharedLibraryUnloaded( ICDISharedLibrary cdiLibrary ) + { + CSharedLibrary library = find( cdiLibrary ); + if ( library != null ) + { + fSharedLibraries.remove( library ); + library.dispose(); + library.fireTerminateEvent(); + } + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSharedLibraryManager#symbolsLoaded(ICDISharedLibrary) + */ + public void symbolsLoaded( ICDISharedLibrary cdiLibrary ) + { + CSharedLibrary library = find( cdiLibrary ); + if ( library != null ) + { + library.fireChangeEvent( DebugEvent.STATE ); + } + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSharedLibraryManager#getSharedLibraries() + */ + public ICSharedLibrary[] getSharedLibraries() + { + return (ICSharedLibrary[])fSharedLibraries.toArray( new ICSharedLibrary[fSharedLibraries.size()] ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSharedLibraryManager#dispose() + */ + public void dispose() + { + Iterator it = fSharedLibraries.iterator(); + while( it.hasNext() ) + { + ((ICSharedLibrary)it.next()).dispose(); + } + fSharedLibraries.clear(); + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) + */ + public Object getAdapter( Class adapter ) + { + if ( adapter.equals( ICSharedLibraryManager.class ) ) + { + return this; + } + if ( adapter.equals( CSharedLibraryManager.class ) ) + { + return this; + } + if ( adapter.equals( IDebugTarget.class ) ) + { + return fDebugTarget; + } + return null; + } + + public IDebugTarget getDebugTarget() + { + return fDebugTarget; + } + + protected void setDebugTarget( CDebugTarget target ) + { + fDebugTarget = target; + } + + protected CSharedLibrary find( ICDISharedLibrary cdiLibrary ) + { + Iterator it = fSharedLibraries.iterator(); + while( it.hasNext() ) + { + CSharedLibrary library = (CSharedLibrary)it.next(); + if ( library.getCDISharedLibrary().equals( cdiLibrary ) ) + return library; + } + return null; + } +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java index f9b96dba2ef..977e108acff 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java @@ -123,7 +123,7 @@ public class CDebugElement extends PlatformObject /** * Fires a debug event marking the creation of this element. */ - protected void fireCreationEvent() + public void fireCreationEvent() { fireEvent( new DebugEvent( this, DebugEvent.CREATE ) ); } 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 ccb87035cdb..db763cc4b6f 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 @@ -20,6 +20,7 @@ import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.CDebugModel; import org.eclipse.cdt.debug.core.ICBreakpointManager; import org.eclipse.cdt.debug.core.ICMemoryManager; +import org.eclipse.cdt.debug.core.ICSharedLibraryManager; import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointHit; import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager; @@ -48,6 +49,7 @@ import org.eclipse.cdt.debug.core.cdi.event.ICDISuspendedEvent; import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint; import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint; import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; +import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.core.cdi.model.ICDIThread; import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint; @@ -69,6 +71,7 @@ import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; import org.eclipse.cdt.debug.core.sourcelookup.ISourceMode; import org.eclipse.cdt.debug.internal.core.CDebugUtils; import org.eclipse.cdt.debug.internal.core.CMemoryManager; +import org.eclipse.cdt.debug.internal.core.CSharedLibraryManager; import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants; import org.eclipse.cdt.debug.internal.core.breakpoints.CBreakpoint; import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceManager; @@ -218,6 +221,11 @@ public class CDebugTarget extends CDebugElement */ private DisassemblyManager fDisassemblyManager; + /** + * A shared library manager for this target. + */ + private CSharedLibraryManager fSharedLibraryManager; + /** * Whether the debugger process is default. */ @@ -256,6 +264,7 @@ public class CDebugTarget extends CDebugElement fSupportsDisconnect = allowsDisconnect & getConfiguration().supportsDisconnect(); setThreadList( new ArrayList( 5 ) ); setDisassemblyManager( new DisassemblyManager( this ) ); + setSharedLibraryManager( new CSharedLibraryManager( this ) ); initialize(); DebugPlugin.getDefault().getLaunchManager().addLaunchListener( this ); DebugPlugin.getDefault().getExpressionManager().addExpressionListener( this ); @@ -867,6 +876,8 @@ public class CDebugTarget extends CDebugElement return this; if ( adapter.equals( DisassemblyManager.class ) ) return fDisassemblyManager; + if ( adapter.equals( ICSharedLibraryManager.class ) ) + return fSharedLibraryManager; return super.getAdapter( adapter ); } @@ -888,6 +899,10 @@ public class CDebugTarget extends CDebugElement { handleThreadCreatedEvent( (ICDICreatedEvent)event ); } + if ( source instanceof ICDISharedLibrary ) + { + getSharedLibraryManager().sharedLibraryLoaded( (ICDISharedLibrary)source ); + } } else if ( event instanceof ICDISuspendedEvent ) { @@ -916,6 +931,10 @@ public class CDebugTarget extends CDebugElement { handleThreadTerminatedEvent( (ICDIDestroyedEvent)event ); } + if ( source instanceof ICDISharedLibrary ) + { + getSharedLibraryManager().sharedLibraryUnloaded( (ICDISharedLibrary)source ); + } } else if ( event instanceof ICDIDisconnectedEvent ) { @@ -930,6 +949,10 @@ public class CDebugTarget extends CDebugElement { handleChangedEvent( (ICDIChangedEvent)event ); } + if ( source instanceof ICDISharedLibrary ) + { + getSharedLibraryManager().symbolsLoaded( (ICDISharedLibrary)source ); + } } else if ( event instanceof ICDIRestartedEvent ) { @@ -1083,6 +1106,7 @@ public class CDebugTarget extends CDebugElement DebugPlugin.getDefault().getExpressionManager().removeExpressionListener( this ); DebugPlugin.getDefault().getLaunchManager().removeLaunchListener( this ); disposeMemoryManager(); + disposeSharedLibraryManager(); removeAllExpressions(); try { @@ -2076,6 +2100,21 @@ public class CDebugTarget extends CDebugElement return fDisassemblyManager; } + protected void setSharedLibraryManager( CSharedLibraryManager libman ) + { + fSharedLibraryManager = libman; + } + + protected CSharedLibraryManager getSharedLibraryManager() + { + return fSharedLibraryManager; + } + + protected void disposeSharedLibraryManager() + { + fSharedLibraryManager.dispose(); + } + /* (non-Javadoc) * @see org.eclipse.cdt.debug.core.ICBreakpointManager#getBreakpointAddress(IBreakpoint) */ diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java new file mode 100644 index 00000000000..e90a9822d6c --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java @@ -0,0 +1,112 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.core.model; + +import org.eclipse.cdt.debug.core.cdi.CDIException; +import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent; +import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener; +import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; +import org.eclipse.cdt.debug.core.model.ICSharedLibrary; +import org.eclipse.debug.core.DebugException; + +/** + * Enter type comment. + * + * @since: Jan 16, 2003 + */ +public class CSharedLibrary extends CDebugElement + implements ICSharedLibrary, + ICDIEventListener +{ + private ICDISharedLibrary fCDILib = null; + + /** + * Constructor for CSharedLibrary. + * @param target + */ + public CSharedLibrary( CDebugTarget target, ICDISharedLibrary cdiLib ) + { + super( target ); + fCDILib = cdiLib; + getCDISession().getEventManager().addEventListener( this ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#getFileName() + */ + public String getFileName() + { + if ( getCDISharedLibrary() != null ) + return getCDISharedLibrary().getFileName(); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#getStartAddress() + */ + public long getStartAddress() + { + if ( getCDISharedLibrary() != null ) + return getCDISharedLibrary().getStartAddress(); + return 0; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#getEndAddress() + */ + public long getEndAddress() + { + if ( getCDISharedLibrary() != null ) + return getCDISharedLibrary().getEndAddress(); + return 0; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#areSymbolsLoaded() + */ + public boolean areSymbolsLoaded() + { + if ( getCDISharedLibrary() != null ) + return getCDISharedLibrary().areSymbolsLoaded(); + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#loadSymbols() + */ + public void loadSymbols() throws DebugException + { + try + { + if ( getCDISharedLibrary() != null ) + getCDISharedLibrary().loadSymbols(); + } + catch( CDIException e ) + { + targetRequestFailed( e.getMessage(), null ); + } + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#dispose() + */ + public void dispose() + { + getCDISession().getEventManager().removeEventListener( this ); + } + + public ICDISharedLibrary getCDISharedLibrary() + { + return fCDILib; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener#handleDebugEvent(ICDIEvent) + */ + public void handleDebugEvent( ICDIEvent event ) + { + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index 23b740f206e..42f1efcf973 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,17 @@ +2003-01-16 Mikhail Khodjaiants + Implementing the Shared Libraries view. + * SharedLibrariesView.java + * SharedLibrariesViewContentProvider.java + * SharedLibrariesViewEventHandler.java + * CDebugImages.java + * ICDebugHelpContextIds.java + * plugin.properties + * plugin.xml + * icons/full/cview16/sharedlibraries_view.gif + * icons/full/eview16/sharedlibraries_view.gif + * icons/full/obj16/sharedlibraryl_obj.gif + * icons/full/obj16/sharedlibraryu_obj.gif + 2003-01-15 Mikhail Khodjaiants The 'getDefaultEditor' method returns 'null' for file names that don't have an extension and are not registered with some editor. Use the default text editor in this case. diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/cview16/sharedlibraries_view.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/cview16/sharedlibraries_view.gif new file mode 100644 index 00000000000..d84096acfc9 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/cview16/sharedlibraries_view.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/eview16/sharedlibraries_view.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/eview16/sharedlibraries_view.gif new file mode 100644 index 00000000000..d84096acfc9 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/eview16/sharedlibraries_view.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/sharedlibraryl_obj.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/sharedlibraryl_obj.gif new file mode 100644 index 00000000000..d84096acfc9 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/sharedlibraryl_obj.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/sharedlibraryu_obj.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/sharedlibraryu_obj.gif new file mode 100644 index 00000000000..99626dee909 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/sharedlibraryu_obj.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index fc9d8a8c41e..0bd4833ed1f 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -8,6 +8,7 @@ providerName=Eclipse.org RegistersView.name=Registers MemoryView.name=Memory +SharedLibrariesView.name=Shared Libraries CDebuggerPage.name=C Debugger UI Page MemoryPreferencePage.name=Memory View diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 81650fb8488..ae00f8fd44d 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -48,6 +48,13 @@ class="org.eclipse.cdt.debug.internal.ui.views.memory.MemoryView" id="org.eclipse.cdt.debug.ui.MemoryView"> + + @@ -58,14 +65,16 @@ relationship="stack" id="org.eclipse.cdt.debug.ui.RegistersView"> - - + +