Browse Source

Created ModuleCollection class

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4512 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 16 years ago
parent
commit
b963238781
  1. 16
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs
  2. 78
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs
  3. 1
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs
  4. 4
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallback.cs
  5. 4
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs
  6. 4
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs
  7. 4
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DefinedTypes.cs
  8. 2
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ThreadName.cs

16
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs

@ -105,25 +105,25 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
protected override void SelectProcess(Process process) protected override void SelectProcess(Process process)
{ {
if (debuggedProcess != null) { if (debuggedProcess != null) {
debuggedProcess.ModuleLoaded -= debuggedProcess_ModuleLoaded; debuggedProcess.Modules.Added -= debuggedProcess_ModuleLoaded;
debuggedProcess.ModuleUnloaded -= debuggedProcess_ModuleUnloaded; debuggedProcess.Modules.Removed -= debuggedProcess_ModuleUnloaded;
} }
debuggedProcess = process; debuggedProcess = process;
if (debuggedProcess != null) { if (debuggedProcess != null) {
debuggedProcess.ModuleLoaded += debuggedProcess_ModuleLoaded; debuggedProcess.Modules.Added += debuggedProcess_ModuleLoaded;
debuggedProcess.ModuleUnloaded += debuggedProcess_ModuleUnloaded; debuggedProcess.Modules.Removed += debuggedProcess_ModuleUnloaded;
} }
RefreshPad(); RefreshPad();
} }
void debuggedProcess_ModuleLoaded(object sender, ModuleEventArgs e) void debuggedProcess_ModuleLoaded(object sender, CollectionItemEventArgs<Module> e)
{ {
AddModule(e.Module); AddModule(e.Item);
} }
void debuggedProcess_ModuleUnloaded(object sender, ModuleEventArgs e) void debuggedProcess_ModuleUnloaded(object sender, CollectionItemEventArgs<Module> e)
{ {
RemoveModule(e.Module); RemoveModule(e.Item);
} }
public override void RefreshPad() public override void RefreshPad()

78
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs

@ -14,47 +14,33 @@ namespace Debugger
{ {
public partial class Process public partial class Process
{ {
int lastAssignedModuleOrderOfLoading= 0; ModuleCollection modules;
List<Module> moduleCollection = new List<Module>(); public ModuleCollection Modules {
get { return modules; }
public event EventHandler<ModuleEventArgs> ModuleLoaded;
public event EventHandler<ModuleEventArgs> ModuleUnloaded;
protected void OnModuleLoaded(Module module)
{
if (ModuleLoaded != null) {
ModuleLoaded(this, new ModuleEventArgs(module));
}
} }
}
protected void OnModuleUnloaded(Module module) public class ModuleCollection: CollectionWithEvents<Module>
{ {
if (ModuleUnloaded != null) { public ModuleCollection(NDebugger debugger):base (debugger) {}
ModuleUnloaded(this, new ModuleEventArgs(module));
}
}
public IList<Module> Modules { int lastAssignedModuleOrderOfLoading = 0;
get{
return moduleCollection.AsReadOnly();
}
}
public Module GetModule(string filename) public Module this[string filename] {
{ get {
foreach(Module module in moduleCollection) { foreach(Module module in this) {
if (module.Filename == filename) { if (module.Filename == filename) {
return module; return module;
}
} }
throw new DebuggerException("Module \"" + filename + "\" is not in collection");
} }
throw new DebuggerException("Module \"" + filename + "\" is not in collection");
} }
internal Module GetModule(ICorDebugModule corModule) internal Module Get(ICorDebugModule corModule)
{ {
foreach(Module module in moduleCollection) { foreach(Module module in this) {
if (module.CorModule == corModule) { if (module.CorModule == corModule) {
return module; return module;
} }
@ -63,38 +49,18 @@ namespace Debugger
throw new DebuggerException("Module is not in collection"); throw new DebuggerException("Module is not in collection");
} }
internal void AddModule(Module module) protected override void OnAdded(Module module)
{ {
module.OrderOfLoading = lastAssignedModuleOrderOfLoading; module.OrderOfLoading = lastAssignedModuleOrderOfLoading;
lastAssignedModuleOrderOfLoading++; lastAssignedModuleOrderOfLoading++;
moduleCollection.Add(module); this.Debugger.Breakpoints.SetInModule(module);
debugger.Breakpoints.SetInModule(module); base.OnAdded(module);
OnModuleLoaded(module);
}
internal void AddModule(ICorDebugModule corModule)
{
AddModule(new Module(this, corModule));
} }
internal void RemoveModule(Module module) protected override void OnRemoved(Module module)
{ {
moduleCollection.Remove(module); base.OnRemoved(module);
OnModuleUnloaded(module);
module.Dispose(); module.Dispose();
} }
internal void RemoveModule(ICorDebugModule corModule)
{
RemoveModule(GetModule(corModule));
}
internal void ClearModules()
{
while(moduleCollection.Count > 0) {
RemoveModule(moduleCollection[0]);
}
lastAssignedModuleOrderOfLoading = 0;
}
} }
} }

1
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs

@ -73,6 +73,7 @@ namespace Debugger
this.callbackInterface = new ManagedCallback(this); this.callbackInterface = new ManagedCallback(this);
evals = new EvalCollection(debugger); evals = new EvalCollection(debugger);
modules = new ModuleCollection(debugger);
} }
internal ICorDebugProcess CorProcess { internal ICorDebugProcess CorProcess {

4
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallback.cs

@ -336,7 +336,7 @@ namespace Debugger
{ {
EnterCallback(PausedReason.Other, "LoadModule " + pModule.Name, pAppDomain); EnterCallback(PausedReason.Other, "LoadModule " + pModule.Name, pAppDomain);
process.AddModule(pModule); process.Modules.Add(new Module(process, pModule));
ExitCallback(); ExitCallback();
} }
@ -395,7 +395,7 @@ namespace Debugger
{ {
EnterCallback(PausedReason.Other, "UnloadModule", pAppDomain); EnterCallback(PausedReason.Other, "UnloadModule", pAppDomain);
process.RemoveModule(pModule); process.Modules.Remove(process.Modules.Get(pModule));
ExitCallback(); ExitCallback();
} }

4
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs

@ -337,7 +337,7 @@ namespace Debugger.MetaData
this.corElementType = (CorElementType)corType.Type; this.corElementType = (CorElementType)corType.Type;
if (this.IsClass || this.IsValueType) { if (this.IsClass || this.IsValueType) {
this.module = process.GetModule(corType.Class.Module); this.module = process.Modules.Get(corType.Class.Module);
this.classProps = module.MetaData.GetTypeDefProps(corType.Class.Token); this.classProps = module.MetaData.GetTypeDefProps(corType.Class.Token);
} }
@ -476,7 +476,7 @@ namespace Debugger.MetaData
static public DebugType Create(Process process, ICorDebugClass corClass, params ICorDebugType[] typeArguments) static public DebugType Create(Process process, ICorDebugClass corClass, params ICorDebugType[] typeArguments)
{ {
MetaDataImport metaData = process.GetModule(corClass.Module).MetaData; MetaDataImport metaData = process.Modules.Get(corClass.Module).MetaData;
bool isValueType = false; bool isValueType = false;
uint superClassToken = metaData.GetTypeDefProps(corClass.Token).SuperClassToken; uint superClassToken = metaData.GetTypeDefProps(corClass.Token).SuperClassToken;

4
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs

@ -144,8 +144,8 @@ namespace Debugger.Tests
lastLogMessage = e.Message; lastLogMessage = e.Message;
LogEvent("LogMessage", e.Message.Replace("\r",@"\r").Replace("\n",@"\n")); LogEvent("LogMessage", e.Message.Replace("\r",@"\r").Replace("\n",@"\n"));
}; };
process.ModuleLoaded += delegate(object sender, ModuleEventArgs e) { process.Modules.Added += delegate(object sender, CollectionItemEventArgs<Module> e) {
LogEvent("ModuleLoaded", e.Module.Filename + (e.Module.HasSymbols ? " (Has symbols)" : " (No symbols)")); LogEvent("ModuleLoaded", e.Item.Filename + (e.Item.HasSymbols ? " (Has symbols)" : " (No symbols)"));
}; };
process.Paused += delegate(object sender, ProcessEventArgs e) { process.Paused += delegate(object sender, ProcessEventArgs e) {
LogEvent("DebuggingPaused", e.Process.PauseSession.PausedReason.ToString() + " " + e.Process.SelectedStackFrame.NextStatement.ToString()); LogEvent("DebuggingPaused", e.Process.PauseSession.PausedReason.ToString() + " " + e.Process.SelectedStackFrame.NextStatement.ToString());

4
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DefinedTypes.cs

@ -37,8 +37,8 @@ namespace Debugger.Tests {
{ {
StartTest("DefinedTypes.cs"); StartTest("DefinedTypes.cs");
ObjectDump("TypesAsString", process.GetModule("DefinedTypes.exe").GetNamesOfDefinedTypes()); ObjectDump("TypesAsString", process.Modules["DefinedTypes.exe"].GetNamesOfDefinedTypes());
ObjectDump("Types", process.GetModule("DefinedTypes.exe").GetDefinedTypes()); ObjectDump("Types", process.Modules["DefinedTypes.exe"].GetDefinedTypes());
EndTest(); EndTest();
} }

2
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ThreadName.cs

@ -30,7 +30,7 @@ namespace Debugger.Tests {
{ {
debugger.Processes.Added += debugger_ProcessStarted; debugger.Processes.Added += debugger_ProcessStarted;
StartTest("ThreadName.cs"); StartTest("ThreadName.cs");
debugger.Processes.Removed -= debugger_ProcessStarted; debugger.Processes.Added -= debugger_ProcessStarted;
ObjectDump("Thread", process.SelectedThread); ObjectDump("Thread", process.SelectedThread);
process.Continue(); process.Continue();
ObjectDump("Thread", process.SelectedThread); ObjectDump("Thread", process.SelectedThread);

Loading…
Cancel
Save