// // // // // $Revision: 1689 $ // using System; using System.Collections.Generic; using Debugger.Wrappers.CorDebug; namespace Debugger { public partial class Process { int lastAssignedModuleOrderOfLoading= 0; List moduleCollection = new List(); public event EventHandler ModuleLoaded; public event EventHandler ModuleUnloaded; protected void OnModuleLoaded(Module module) { if (ModuleLoaded != null) { ModuleLoaded(this, new ModuleEventArgs(module)); } } protected void OnModuleUnloaded(Module module) { if (ModuleUnloaded != null) { ModuleUnloaded(this, new ModuleEventArgs(module)); } } public IList Modules { get{ return moduleCollection.AsReadOnly(); } } public Module GetModule(string filename) { foreach(Module module in moduleCollection) { if (module.Filename == filename) { return module; } } throw new DebuggerException("Module \"" + filename + "\" is not in collection"); } internal Module GetModule(ICorDebugModule corModule) { foreach(Module module in moduleCollection) { if (module.CorModule == corModule) { return module; } } throw new DebuggerException("Module is not in collection"); } internal void AddModule(Module module) { module.OrderOfLoading = lastAssignedModuleOrderOfLoading; lastAssignedModuleOrderOfLoading++; moduleCollection.Add(module); debugger.SetBreakpointsInModule(module); OnModuleLoaded(module); } internal void AddModule(ICorDebugModule corModule) { AddModule(new Module(this, corModule)); } internal void RemoveModule(Module module) { moduleCollection.Remove(module); OnModuleUnloaded(module); module.Dispose(); } internal void RemoveModule(ICorDebugModule corModule) { RemoveModule(GetModule(corModule)); } internal void ClearModules() { while(moduleCollection.Count > 0) { RemoveModule(moduleCollection[0]); } lastAssignedModuleOrderOfLoading = 0; } } }