From fc68c36469c5d32920be36681b8b957eaafcf837 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Wed, 4 Jan 2006 19:14:33 +0000 Subject: [PATCH] Bug 118900: Display libraries loaded in post-mortem debug. Applied with modifications the patch from Joanne Woo (jwoo.mvista.com). --- debug/org.eclipse.cdt.debug.core/ChangeLog | 5 +++++ .../internal/core/model/CDebugTarget.java | 14 +++++++++++++- .../internal/core/model/CModuleManager.java | 19 +++++++++++++------ debug/org.eclipse.cdt.debug.mi.core/ChangeLog | 5 +++++ .../cdt/debug/mi/core/GDBCDIDebugger.java | 2 ++ 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index 66d0b038c9b..fddf90fd2dc 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,8 @@ +2006-01-04 Mikhail Khodjaiants + Bug 118900: Display libraries loaded in post-mortem debug. + * CDebugTarget.java + * CModuleManager.java + 2005-12-30 Mikhail Khodjaiants Cleanup. * CModule.java 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 9fcc59f7709..4d232eb4dd3 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 @@ -343,7 +343,19 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv } protected void initializeModuleManager() { - getModuleManager().addModules( new ICModule[] { CModule.createExecutable( this, getExecFile().getPath() ) } ); + ICDISharedLibrary[] slibs = new ICDISharedLibrary[0]; + try { + slibs = getCDITarget().getSharedLibraries(); + } + catch( CDIException e ) { + DebugPlugin.log( e ); + } + ICModule[] modules = new ICModule[slibs.length + 1]; + modules[0] = CModule.createExecutable( this, getExecFile().getPath() ); + for ( int i = 0; i < slibs.length; ++i ) { + modules[i + 1] = CModule.createSharedLibrary( this, slibs[i] ); + } + getModuleManager().addModules( modules ); } protected void initializeMemoryBlocks() { 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 index 9f4fb3941b6..924ccc0ce67 100644 --- 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 @@ -109,19 +109,26 @@ public class CModuleManager implements IModuleRetrieval { } public void sharedLibraryLoaded( ICDISharedLibrary cdiLibrary ) { - CModule library = CModule.createSharedLibrary( getDebugTarget(), cdiLibrary ); + CModule library = null; synchronized( fModules ) { - fModules.add( library ); + if ( find( cdiLibrary ) == null ) { + library = CModule.createSharedLibrary( getDebugTarget(), cdiLibrary ); + fModules.add( library ); + } } - library.fireCreationEvent(); + if ( library != null ) + library.fireCreationEvent(); } public void sharedLibraryUnloaded( ICDISharedLibrary cdiLibrary ) { - CModule library = find( cdiLibrary ); - if ( library != null ) { - synchronized( fModules ) { + CModule library = null; + synchronized( fModules ) { + find( cdiLibrary ); + if ( library != null ) { fModules.remove( library ); } + } + if ( library != null ) { library.dispose(); library.fireTerminateEvent(); } diff --git a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog index 2410a23763b..8078eed29b8 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog @@ -1,3 +1,8 @@ +2006-01-04 Mikhail Khodjaiants + Bug 118900: Display libraries loaded in post-mortem debug. + Applied with modifications the patch from Joanne Woo (jwoo.mvista.com). + * GDBCDIDebugger.java + 2005-12-27 Mikhail Khodjaiants Cleanup. * BreakpointManager.java diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger.java index f19735cede9..42142874e25 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBCDIDebugger.java @@ -7,6 +7,7 @@ * * Contributors: * QNX Software Systems - Initial API and implementation + * Joanne Woo (jwoo@mvista.com) - bug #118900 *******************************************************************************/ package org.eclipse.cdt.debug.mi.core; @@ -169,6 +170,7 @@ public class GDBCDIDebugger implements ICDIDebugger { String gdbinit = config.getAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT, IMILaunchConfigurationConstants.DEBUGGER_GDB_INIT_DEFAULT); session = MIPlugin.getDefault().createCSession(gdb, miVersion, exe.getPath().toFile(), coreFile.toFile(), cwd, gdbinit, monitor); initializeLibraries(config, session); + session.getSharedLibraryManager().update(); return session; } catch (Exception e) { // Catch all wrap them up and rethrow