From 461f0b0ef08ca6eed20bd53e30549e5dc29cb409 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Mon, 7 Feb 2005 22:49:42 +0000 Subject: [PATCH] Bug 82264: Enhance the Shared Libraries view. Core support for the Modules view. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 10 + .../cdt/debug/core/model/ICDebugTarget.java | 24 +++ .../cdt/debug/core/model/ICModule.java | 126 +++++++++++ .../internal/core/model/CDebugTarget.java | 55 ++++- .../debug/internal/core/model/CModule.java | 198 ++++++++++++++++++ .../internal/core/model/CModuleManager.java | 145 +++++++++++++ .../core/model/CoreModelMessages.properties | 4 + 7 files changed, 560 insertions(+), 2 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICModule.java create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CModule.java create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CModuleManager.java diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index c16f0a39629..95fd82c6686 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,13 @@ +2005-02-07 Mikhail Khodjaiants + Bug 82264: Enhance the Shared Libraries view. + Core support for the Modules view. + * ICDebugTarget.java + * ICModule.java: new + * CoreModelMessages.properties + * CDebugTarget.java + * CModule.java: new + * CModuleManager.java: new + 2005-02-03 Mikhail Khodjaiants Fix for bug 84187: "Toggle Watchpoint" and "Toggle Method Breakpoint" don't work with C editor. ICWatchpoint should extend ILineBreakpoint to allow watchpoints to be shown in editors. diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICDebugTarget.java index 25a260718c3..09499cd93a9 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICDebugTarget.java @@ -92,4 +92,28 @@ public interface ICDebugTarget extends IDebugTarget, * @return whether this target is a post mortem type */ public boolean isPostMortem(); + + /** + * Returns whether there are modules currently loaded in this debug target. + * + * @return whether there are modules currently loaded in this debug target + * + * @throws DebugException + */ + public boolean hasModules() throws DebugException; + + /** + * Returns the array of the currently loaded modules. + * + * @return the array of the currently loaded modules + * @throws DebugException if this method fails. Reasons include: + */ + public ICModule[] getModules() throws DebugException; + + /** + * Load symbols for all currently loaded modules. + * + * @throws DebugException if this method fails. Reasons include: + */ + public void loadSymbolsForAllModules() throws DebugException; } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICModule.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICModule.java new file mode 100644 index 00000000000..ba1c8d2e7bc --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICModule.java @@ -0,0 +1,126 @@ +/********************************************************************** + * Copyright (c) 2004 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * QNX Software Systems - Initial API and implementation + ***********************************************************************/ +package org.eclipse.cdt.debug.core.model; + +import org.eclipse.cdt.core.IAddress; +import org.eclipse.cdt.core.IAddressFactory; +import org.eclipse.core.runtime.IPath; +import org.eclipse.debug.core.DebugException; + +/** + * Represents a module in the process being debugged. + */ +public interface ICModule extends ICDebugElement { + + /** + * Type constant which identifies executables. + */ + public static final int EXECUTABLE = 1; + + /** + * Type constant which identifies shared libraries. + */ + public static final int SHARED_LIBRARY = 2; + + /** + * Type constant which identifies core files. + */ + public static final int CORE = 3; + + /** + * Returns the type of this module. + * The returned value will be one of EXECUTABLE, + * SHARED_LIBRARY, CORE. + * + * @return the type of this module + */ + public int getType(); + + /** + * Returns the name of this module. + * + * @return the name of this module + */ + public String getName(); + + /** + * Returns the image name of this module. The name may or may not + * contain a full path. + * + * @return the image name of this module + */ + public IPath getImageName(); + + /** + * Returns the full path of the file from which symbols to be loaded. + * + * @return the full path of the file from which symbols to be loaded + */ + public IPath getSymbolsFileName(); + + /** + * Associate the specified file as a symbol provider for this module. + * If null is passed as a file name the internal symbols + * search mechanism will be used. + * + * @param symbolsFile the symbol provider for this module. + */ + public void setSymbolsFileName( IPath symbolsFile ); + + /** + * Returns the base address of this module. + * + * @return the base address of this module + */ + public IAddress getBaseAddress(); + + /** + * Returns the size of this module. + * + * @return the size of this module + */ + public long getSize(); + + /** + * Returns whether the symbols of this module are read. + * + * @return whether the symbols of this module are read + */ + public boolean areSymbolsLoaded(); + + /** + * Loads the module symbols from the specified file. + * + * @throws DebugException if this method fails. Reasons include: + */ + public void loadSymbols() throws DebugException; + + /** + * Returns the name of the platform. + * + * @return the name of the platform + */ + public String getPlatform(); + + /** + * Returns whether this module is little endian. + * + * @return whether this module is little endian + */ + public boolean isLittleEndian(); + + /** + * Returns the address factory associated with this module. + * + * @return the address factory + */ + public IAddressFactory getAddressFactory(); +} 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 68434053aea..4da78033c73 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 @@ -66,6 +66,7 @@ import org.eclipse.cdt.debug.core.model.ICDebugElementStatus; import org.eclipse.cdt.debug.core.model.ICDebugTarget; import org.eclipse.cdt.debug.core.model.ICGlobalVariable; import org.eclipse.cdt.debug.core.model.ICLineBreakpoint; +import org.eclipse.cdt.debug.core.model.ICModule; import org.eclipse.cdt.debug.core.model.ICSharedLibrary; import org.eclipse.cdt.debug.core.model.ICSignal; import org.eclipse.cdt.debug.core.model.IDebuggerProcessSupport; @@ -162,6 +163,11 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv */ private CSharedLibraryManager fSharedLibraryManager; + /** + * The module manager for this target. + */ + private CModuleManager fModuleManager; + /** * The signal manager for this target. */ @@ -230,6 +236,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv setThreadList( new ArrayList( 5 ) ); createDisassembly(); setSharedLibraryManager( new CSharedLibraryManager( this ) ); + setModuleManager( new CModuleManager( this ) ); setSignalManager( new CSignalManager( this ) ); setRegisterManager( new CRegisterManager( this ) ); setBreakpointManager( new CBreakpointManager( this ) ); @@ -248,6 +255,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv initializeBreakpoints(); initializeRegisters(); initializeSourceManager(); + initializeModuleManager(); getLaunch().addDebugTarget( this ); fireEventSet( (DebugEvent[])debugEvents.toArray( new DebugEvent[debugEvents.size()] ) ); } @@ -327,6 +335,10 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv } } + protected void initializeModuleManager() { + getModuleManager().addModules( new ICModule[] { CModule.createExecutable( this, getExecFile().getPath() ) } ); + } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IDebugTarget#getProcess() */ @@ -797,8 +809,6 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv return this; if ( adapter.equals( CBreakpointManager.class ) ) return getBreakpointManager(); - if ( adapter.equals( ICSharedLibraryManager.class ) ) - return getSharedLibraryManager(); if ( adapter.equals( CSignalManager.class ) ) return getSignalManager(); if ( adapter.equals( ICRegisterManager.class ) ) @@ -831,6 +841,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv } if ( source instanceof ICDISharedLibrary ) { getSharedLibraryManager().sharedLibraryLoaded( (ICDISharedLibrary)source ); + getModuleManager().sharedLibraryLoaded( (ICDISharedLibrary)source ); } } else if ( event instanceof ICDISuspendedEvent ) { @@ -854,6 +865,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv } if ( source instanceof ICDISharedLibrary ) { getSharedLibraryManager().sharedLibraryUnloaded( (ICDISharedLibrary)source ); + getModuleManager().sharedLibraryUnloaded( (ICDISharedLibrary)source ); } } else if ( event instanceof ICDIDisconnectedEvent ) { @@ -971,6 +983,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv saveGlobalVariables(); disposeGlobalVariableManager(); disposeSharedLibraryManager(); + disposeModuleManager(); disposeSignalManager(); disposeRegisterManager(); disposeDisassembly(); @@ -1399,6 +1412,19 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv fSharedLibraryManager.dispose(); } + protected void setModuleManager( CModuleManager mm ) { + fModuleManager = mm; + } + + protected CModuleManager getModuleManager() { + return fModuleManager; + } + + protected void disposeModuleManager() { + fModuleManager.dispose(); + fModuleManager = null; + } + protected void setSignalManager( CSignalManager sm ) { fSignalManager = sm; } @@ -1781,6 +1807,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv private void handleSymbolsLoaded( ICDISharedLibrary library ) { getSharedLibraryManager().symbolsLoaded( library ); + getModuleManager().symbolsLoaded( library ); } public ICGlobalVariable createGlobalVariable( IGlobalVariableDescriptor info ) throws DebugException { @@ -1793,4 +1820,28 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv } return CVariableFactory.createGlobalVariable( this, info, vo ); } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICDebugTarget#hasModules() + */ + public boolean hasModules() throws DebugException { + CModuleManager mm = getModuleManager(); + return ( mm != null ) ? mm.hasModules() : false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICDebugTarget#getModules() + */ + public ICModule[] getModules() throws DebugException { + CModuleManager mm = getModuleManager(); + return ( mm != null ) ? mm.getModules() : new ICModule[0]; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICDebugTarget#loadSymbolsForAllModules() + */ + public void loadSymbolsForAllModules() throws DebugException { + CModuleManager mm = getModuleManager(); + mm.loadSymbolsForAll(); + } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CModule.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CModule.java new file mode 100644 index 00000000000..7db9373acbd --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CModule.java @@ -0,0 +1,198 @@ +/********************************************************************** + * Copyright (c) 2004 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * QNX Software Systems - Initial API and implementation + ***********************************************************************/ +package org.eclipse.cdt.debug.internal.core.model; + +import java.math.BigInteger; +import org.eclipse.cdt.core.IAddress; +import org.eclipse.cdt.core.IAddressFactory; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.IBinary; +import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; +import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; +import org.eclipse.cdt.debug.core.model.ICModule; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.debug.core.DebugException; + +/** + * The CDI based implementation of ICModule. + */ +public class CModule extends CDebugElement implements ICModule { + + private int fType = 0; + + private ICElement fCElement; + + private ICDIObject fCDIObject; + + private IPath fImageName; + + private IPath fSymbolsFileName; + + public static CModule createExecutable( CDebugTarget target, IPath path ) { + // TODO Add support for executables to CDI. + return new CModule( EXECUTABLE, target, path ); + } + + public static CModule createSharedLibrary( CDebugTarget target, ICDISharedLibrary lib ) { + return new CModule( SHARED_LIBRARY, target, lib ); + } + + public static CModule createCore( CDebugTarget target, IPath path ) { + // TODO Add support for core file to CDI. + return new CModule( CORE, target, path ); + } + + /** + * Constructor for CModule. + */ + private CModule( int type, CDebugTarget target, IPath path ) { + super( target ); + fType = type; + fCElement = CoreModel.getDefault().create( path ); + fCDIObject = null; + fImageName = path; + fSymbolsFileName = path; + } + + /** + * Constructor for CModule. + */ + private CModule( int type, CDebugTarget target, ICDIObject cdiObject ) { + super( target ); + fType = type; + if ( cdiObject instanceof ICDISharedLibrary ) { + fCElement = CoreModel.getDefault().create( new Path( ((ICDISharedLibrary)cdiObject).getFileName() ) ); + } + fCDIObject = cdiObject; + fImageName = ( ( cdiObject instanceof ICDISharedLibrary ) ) ? new Path( ((ICDISharedLibrary)cdiObject).getFileName() ) : new Path( CoreModelMessages.getString( "CModule.0" ) ); //$NON-NLS-1$ + fSymbolsFileName = fImageName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#getType() + */ + public int getType() { + return fType; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#getName() + */ + public String getName() { + return fImageName.lastSegment().toString(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#getImageName() + */ + public IPath getImageName() { + return fImageName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#getSymbolsFileName() + */ + public IPath getSymbolsFileName() { + return fSymbolsFileName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#setSymbolsFileName(org.eclipse.core.runtime.IPath) + */ + public void setSymbolsFileName( IPath symbolsFile ) { + fSymbolsFileName = symbolsFile; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#getBaseAddress() + */ + public IAddress getBaseAddress() { + return ( fCDIObject instanceof ICDISharedLibrary ) ? getAddressFactory().createAddress( ((ICDISharedLibrary)fCDIObject).getStartAddress() ) : getAddressFactory().getZero(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#getSize() + */ + public long getSize() { + long result = 0; + if ( fCDIObject instanceof ICDISharedLibrary ) { + BigInteger start = ((ICDISharedLibrary)fCDIObject).getStartAddress(); + BigInteger end = ((ICDISharedLibrary)fCDIObject).getEndAddress(); + if ( end.compareTo( start ) > 0 ) + result = end.subtract( start ).longValue(); + } + return result; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#areSymbolsLoaded() + */ + public boolean areSymbolsLoaded() { + return ( fCElement instanceof IBinary ) ? ((IBinary)fCElement).hasDebug() : + ( ( fCDIObject instanceof ICDISharedLibrary ) ? ((ICDISharedLibrary)fCDIObject).areSymbolsLoaded() : false ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#loadSymbols() + */ + public void loadSymbols() throws DebugException { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#getPlatform() + */ + public String getPlatform() { + return ( fCElement instanceof IBinary ) ? ((IBinary)fCElement).getCPU() : CoreModelMessages.getString( "CModule.1" ); //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#isLittleEndian() + */ + public boolean isLittleEndian() { + return ( fCElement instanceof IBinary ) ? ((IBinary)fCElement).isLittleEndian() : ((CDebugTarget)getDebugTarget()).isLittleEndian(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICModule#getAddressFactory() + */ + public IAddressFactory getAddressFactory() { + return ((CDebugTarget)getDebugTarget()).getAddressFactory(); + } + + public void dispose() { + + } + + public boolean equals( ICDIObject cdiObject ) { + return ( fCDIObject != null ) ? fCDIObject.equals( cdiObject ) : false; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) + */ + public Object getAdapter( Class adapter ) { + if ( ICElement.class.equals( adapter ) ) { + return getCElement(); + } + if ( IBinary.class.equals( adapter ) && getCElement() instanceof IBinary ) { + return (IBinary)getCElement(); + } + return super.getAdapter( adapter ); + } + + protected ICElement getCElement() { + return fCElement; + } +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CModuleManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CModuleManager.java new file mode 100644 index 00000000000..ab922f1ce88 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CModuleManager.java @@ -0,0 +1,145 @@ +/********************************************************************** + * Copyright (c) 2004 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * QNX Software Systems - Initial API and implementation + ***********************************************************************/ +package org.eclipse.cdt.debug.internal.core.model; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import org.eclipse.cdt.debug.core.CDIDebugModel; +import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; +import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; +import org.eclipse.cdt.debug.core.model.ICModule; +import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.MultiStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.debug.core.DebugEvent; +import org.eclipse.debug.core.DebugException; + +/** + * Manages the modules loaded on this debug target. + */ +public class CModuleManager { + + /** + * The debug target associated with this manager. + */ + private CDebugTarget fDebugTarget; + + /** + * The collection of the shared libraries loaded on this target. + */ + private ArrayList fModules; + + /** + * Constructor for CModuleManager. + */ + public CModuleManager( CDebugTarget target ) { + fDebugTarget = target; + fModules = new ArrayList( 5 ); + } + + public boolean hasModules() { + return !fModules.isEmpty(); + } + + public ICModule[] getModules() { + return (ICModule[])fModules.toArray( new ICModule[fModules.size()] ); + } + + public void loadSymbolsForAll() throws DebugException { + MultiStatus ms = new MultiStatus( CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, CoreModelMessages.getString( "CModuleManager.0" ), null ); //$NON-NLS-1$ + Iterator it = fModules.iterator(); + while( it.hasNext() ) { + ICModule module = (ICModule)it.next(); + try { + module.loadSymbols(); + } + catch( DebugException e ) { + ms.add( new Status( IStatus.ERROR, CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, e.getMessage(), e ) ); + } + } + if ( !ms.isOK() ) { + throw new DebugException( ms ); + } + } + + public void loadSymbols( ICModule[] modules ) throws DebugException { + MultiStatus ms = new MultiStatus( CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, CoreModelMessages.getString( "CModuleManager.1" ), null ); //$NON-NLS-1$ + for ( int i = 0; i < modules.length; ++i ) { + try { + modules[i].loadSymbols(); + } + catch( DebugException e ) { + ms.add( new Status( IStatus.ERROR, CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, e.getMessage(), e ) ); + } + } + if ( !ms.isOK() ) { + throw new DebugException( ms ); + } + } + + public void dispose() { + Iterator it = fModules.iterator(); + while( it.hasNext() ) { + ((CModule)it.next()).dispose(); + } + fModules.clear(); + } + + protected CDebugTarget getDebugTarget() { + return fDebugTarget; + } + + protected void addModules( ICModule[] modules ) { + fModules.addAll( Arrays.asList( modules ) ); + } + + protected void removeModules( ICModule[] modules ) { + fModules.removeAll( Arrays.asList( modules ) ); + } + + public void sharedLibraryLoaded( ICDISharedLibrary cdiLibrary ) { + CModule library = CModule.createSharedLibrary( getDebugTarget(), cdiLibrary ); + synchronized( fModules ) { + fModules.add( library ); + } + library.fireCreationEvent(); + } + + public void sharedLibraryUnloaded( ICDISharedLibrary cdiLibrary ) { + CModule library = find( cdiLibrary ); + if ( library != null ) { + synchronized( fModules ) { + fModules.remove( library ); + } + library.dispose(); + library.fireTerminateEvent(); + } + } + + public void symbolsLoaded( ICDIObject cdiObject ) { + CModule module = find( cdiObject ); + if ( module != null ) { + module.fireChangeEvent( DebugEvent.STATE ); + } + } + + private CModule find( ICDIObject cdiObject ) { + Iterator it = fModules.iterator(); + while( it.hasNext() ) { + CModule module = (CModule)it.next(); + if ( module.equals( cdiObject ) ) + return module; + } + return null; + } +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CoreModelMessages.properties b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CoreModelMessages.properties index eaf547eb911..2b1c72d6e64 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CoreModelMessages.properties +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CoreModelMessages.properties @@ -27,3 +27,7 @@ CVariable.5=Type is not available. CIndexedValue.0=Index out of bounds. CIndexedValue.1=Index out of bounds. CIndexedValue.2=Specified range out of bounds. +CModule.0=Unknown +CModule.1=Unknown +CModuleManager.0=Error loading symbols. +CModuleManager.1=Error loading symbols.