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. 68
      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 @@ -105,25 +105,25 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
protected override void SelectProcess(Process process)
{
if (debuggedProcess != null) {
debuggedProcess.ModuleLoaded -= debuggedProcess_ModuleLoaded;
debuggedProcess.ModuleUnloaded -= debuggedProcess_ModuleUnloaded;
debuggedProcess.Modules.Added -= debuggedProcess_ModuleLoaded;
debuggedProcess.Modules.Removed -= debuggedProcess_ModuleUnloaded;
}
debuggedProcess = process;
if (debuggedProcess != null) {
debuggedProcess.ModuleLoaded += debuggedProcess_ModuleLoaded;
debuggedProcess.ModuleUnloaded += debuggedProcess_ModuleUnloaded;
debuggedProcess.Modules.Added += debuggedProcess_ModuleLoaded;
debuggedProcess.Modules.Removed += debuggedProcess_ModuleUnloaded;
}
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()

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

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

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

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

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

@ -337,7 +337,7 @@ namespace Debugger.MetaData @@ -337,7 +337,7 @@ namespace Debugger.MetaData
this.corElementType = (CorElementType)corType.Type;
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);
}
@ -476,7 +476,7 @@ namespace Debugger.MetaData @@ -476,7 +476,7 @@ namespace Debugger.MetaData
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;
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 @@ -144,8 +144,8 @@ namespace Debugger.Tests
lastLogMessage = e.Message;
LogEvent("LogMessage", e.Message.Replace("\r",@"\r").Replace("\n",@"\n"));
};
process.ModuleLoaded += delegate(object sender, ModuleEventArgs e) {
LogEvent("ModuleLoaded", e.Module.Filename + (e.Module.HasSymbols ? " (Has symbols)" : " (No symbols)"));
process.Modules.Added += delegate(object sender, CollectionItemEventArgs<Module> e) {
LogEvent("ModuleLoaded", e.Item.Filename + (e.Item.HasSymbols ? " (Has symbols)" : " (No symbols)"));
};
process.Paused += delegate(object sender, ProcessEventArgs e) {
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 { @@ -37,8 +37,8 @@ namespace Debugger.Tests {
{
StartTest("DefinedTypes.cs");
ObjectDump("TypesAsString", process.GetModule("DefinedTypes.exe").GetNamesOfDefinedTypes());
ObjectDump("Types", process.GetModule("DefinedTypes.exe").GetDefinedTypes());
ObjectDump("TypesAsString", process.Modules["DefinedTypes.exe"].GetNamesOfDefinedTypes());
ObjectDump("Types", process.Modules["DefinedTypes.exe"].GetDefinedTypes());
EndTest();
}

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

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

Loading…
Cancel
Save