Browse Source

Created ProcessCollection class

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4510 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 16 years ago
parent
commit
73eff347f1
  1. 22
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  2. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/CollectionWithEvents.cs
  3. 49
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/NDebugger-Processes.cs
  4. 9
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/NDebugger.cs
  5. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs
  6. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallbackSwitch.cs
  7. 8
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ThreadName.cs

22
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs

@ -442,8 +442,8 @@ namespace ICSharpCode.SharpDevelop.Services @@ -442,8 +442,8 @@ namespace ICSharpCode.SharpDevelop.Services
debugger.Options = DebuggingOptions.Instance;
debugger.DebuggerTraceMessage += debugger_TraceMessage;
debugger.ProcessStarted += debugger_ProcessStarted;
debugger.ProcessExited += debugger_ProcessExited;
debugger.Processes.Added += debugger_ProcessStarted;
debugger.Processes.Removed += debugger_ProcessExited;
DebuggerService.BreakPointAdded += delegate (object sender, BreakpointBookmarkEventArgs e) {
AddBreakpoint(e.BreakpointBookmark);
@ -513,12 +513,12 @@ namespace ICSharpCode.SharpDevelop.Services @@ -513,12 +513,12 @@ namespace ICSharpCode.SharpDevelop.Services
setBookmarkColor();
EventHandler<ProcessEventArgs> bp_debugger_ProcessStarted = (sender, e) => {
EventHandler<CollectionItemEventArgs<Process>> bp_debugger_ProcessStarted = (sender, e) => {
setBookmarkColor();
// User can change line number by inserting or deleting lines
breakpoint.Line = bookmark.LineNumber;
};
EventHandler<ProcessEventArgs> bp_debugger_ProcessExited = (sender, e) => {
EventHandler<CollectionItemEventArgs<Process>> bp_debugger_ProcessExited = (sender, e) => {
setBookmarkColor();
};
@ -549,15 +549,15 @@ namespace ICSharpCode.SharpDevelop.Services @@ -549,15 +549,15 @@ namespace ICSharpCode.SharpDevelop.Services
debugger.Breakpoints.Remove(breakpoint);
// unregister the events
debugger.ProcessStarted -= bp_debugger_ProcessStarted;
debugger.ProcessExited -= bp_debugger_ProcessExited;
debugger.Processes.Added -= bp_debugger_ProcessStarted;
debugger.Processes.Removed -= bp_debugger_ProcessExited;
breakpoint.Hit -= bp_debugger_BreakpointHit;
BookmarkManager.Removed -= bp_bookmarkManager_Removed;
}
};
// register the events
debugger.ProcessStarted += bp_debugger_ProcessStarted;
debugger.ProcessExited += bp_debugger_ProcessExited;
debugger.Processes.Added += bp_debugger_ProcessStarted;
debugger.Processes.Removed += bp_debugger_ProcessExited;
breakpoint.Hit += bp_debugger_BreakpointHit;
BookmarkManager.Removed += bp_bookmarkManager_Removed;
}
@ -588,17 +588,17 @@ namespace ICSharpCode.SharpDevelop.Services @@ -588,17 +588,17 @@ namespace ICSharpCode.SharpDevelop.Services
LoggingService.Debug("Debugger: " + e.Message);
}
void debugger_ProcessStarted(object sender, ProcessEventArgs e)
void debugger_ProcessStarted(object sender, CollectionItemEventArgs<Process> e)
{
if (debugger.Processes.Count == 1) {
if (DebugStarted != null) {
DebugStarted(this, EventArgs.Empty);
}
}
e.Process.LogMessage += LogMessage;
e.Item.LogMessage += LogMessage;
}
void debugger_ProcessExited(object sender, ProcessEventArgs e)
void debugger_ProcessExited(object sender, CollectionItemEventArgs<Process> e)
{
if (debugger.Processes.Count == 0) {
if (DebugStopped != null) {

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/CollectionWithEvents.cs

@ -59,7 +59,7 @@ namespace Debugger @@ -59,7 +59,7 @@ namespace Debugger
this.debugger = debugger;
}
public NDebugger Debugger {
protected NDebugger Debugger {
get {
return debugger;
}

49
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/NDebugger-Processes.cs

@ -14,20 +14,23 @@ namespace Debugger @@ -14,20 +14,23 @@ namespace Debugger
{
public partial class NDebugger
{
List<Process> processCollection = new List<Process>();
ProcessCollection processes;
public event EventHandler<ProcessEventArgs> ProcessStarted;
public event EventHandler<ProcessEventArgs> ProcessExited;
public IList<Process> Processes {
get {
return processCollection.AsReadOnly();
public ProcessCollection Processes {
get { return processes; }
}
}
public class ProcessCollection: CollectionWithEvents<Process>
{
public ProcessCollection(NDebugger debugger): base(debugger)
{
}
internal Process GetProcess(ICorDebugProcess corProcess)
internal Process Get(ICorDebugProcess corProcess)
{
foreach (Process process in Processes) {
foreach (Process process in this) {
if (process.CorProcess == corProcess) {
return process;
}
@ -35,33 +38,13 @@ namespace Debugger @@ -35,33 +38,13 @@ namespace Debugger
return null;
}
internal void AddProcess(Process process)
protected override void OnRemoved(Process item)
{
processCollection.Add(process);
OnProcessStarted(process);
}
base.OnRemoved(item);
internal void RemoveProcess(Process process)
{
processCollection.Remove(process);
OnProcessExited(process);
if (processCollection.Count == 0) {
if (this.Count == 0) {
// Exit callback and then terminate the debugger
this.MTA2STA.AsyncCall( delegate { this.TerminateDebugger(); } );
}
}
protected virtual void OnProcessStarted(Process process)
{
if (ProcessStarted != null) {
ProcessStarted(this, new ProcessEventArgs(process));
}
}
protected virtual void OnProcessExited(Process process)
{
if (ProcessExited != null) {
ProcessExited(this, new ProcessEventArgs(process));
this.Debugger.MTA2STA.AsyncCall( delegate { this.Debugger.TerminateDebugger(); } );
}
}
}

9
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/NDebugger.cs

@ -53,6 +53,7 @@ namespace Debugger @@ -53,6 +53,7 @@ namespace Debugger
public NDebugger()
{
processes = new ProcessCollection(this);
breakpoints = new BreakpointCollection(this);
if (ApartmentState.STA == System.Threading.Thread.CurrentThread.GetApartmentState()) {
@ -166,7 +167,7 @@ namespace Debugger @@ -166,7 +167,7 @@ namespace Debugger
{
InitDebugger(GetProgramVersion(filename));
Process process = Process.CreateProcess(this, filename, workingDirectory, arguments);
AddProcess(process);
this.Processes.Add(process);
return process;
}
@ -175,7 +176,7 @@ namespace Debugger @@ -175,7 +176,7 @@ namespace Debugger
InitDebugger(GetProgramVersion(existingProcess.MainModule.FileName));
ICorDebugProcess corDebugProcess = corDebug.DebugActiveProcess((uint)existingProcess.Id, 0);
Process process = new Process(this, corDebugProcess);
AddProcess(process);
this.Processes.Add(process);
return process;
}
@ -187,8 +188,8 @@ namespace Debugger @@ -187,8 +188,8 @@ namespace Debugger
}
// Detach all processes.
while (processCollection.Count > 0) {
Process process = processCollection[0];
while (this.Processes.Count > 0) {
Process process = this.Processes[0];
process.Detach();
}
}

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

@ -41,7 +41,7 @@ namespace Debugger @@ -41,7 +41,7 @@ namespace Debugger
if (IsPaused) {
NotifyResumed(DebuggeeStateAction.Clear);
}
debugger.RemoveProcess(this);
debugger.Processes.Remove(this);
}
}

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallbackSwitch.cs

@ -73,7 +73,7 @@ namespace Debugger @@ -73,7 +73,7 @@ namespace Debugger
public ManagedCallback GetProcessCallbackInterface(string name, ICorDebugProcess pProcess)
{
Process process = debugger.GetProcess(pProcess);
Process process = debugger.Processes.Get(pProcess);
// Make *really* sure the process is not dead
if (process == null) {
debugger.TraceMessage("Ignoring callback \"" + name + "\": Process not found");

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

@ -28,18 +28,18 @@ namespace Debugger.Tests { @@ -28,18 +28,18 @@ namespace Debugger.Tests {
[NUnit.Framework.Test]
public void ThreadName()
{
debugger.ProcessStarted += debugger_ProcessStarted;
debugger.Processes.Added += debugger_ProcessStarted;
StartTest("ThreadName.cs");
debugger.ProcessStarted -= debugger_ProcessStarted;
debugger.Processes.Removed -= debugger_ProcessStarted;
ObjectDump("Thread", process.SelectedThread);
process.Continue();
ObjectDump("Thread", process.SelectedThread);
EndTest();
}
void debugger_ProcessStarted(object sender, ProcessEventArgs e)
void debugger_ProcessStarted(object sender, CollectionItemEventArgs<Process> e)
{
e.Process.ThreadStarted += delegate(object sender2, ThreadEventArgs f) {
e.Item.ThreadStarted += delegate(object sender2, ThreadEventArgs f) {
ObjectDump("ThreadStartedEvent", f.Thread);
};
}

Loading…
Cancel
Save