private bool HandleEvent(MDS.Event e, MDS.SuspendPolicy policy) { //LogProvider.Log ("Received Event: " + e.GetType ()); bool exit = false; lock (vm) { exit = exited; } if (exit) { return(false); } bool ret = running; //if (VMSuspended != null && policy != MDS.SuspendPolicy.None) //{ // switch (e.EventType) // { // case MDS.EventType.VMStart: // case MDS.EventType.VMDeath: // case MDS.EventType.VMDisconnect: // case MDS.EventType.AppDomainCreate: // case MDS.EventType.AppDomainUnload: // case MDS.EventType.ThreadStart: // case MDS.EventType.ThreadDeath: // case MDS.EventType.AssemblyLoad: // case MDS.EventType.AssemblyUnload: // case MDS.EventType.TypeLoad: // break; // default: // LogProvider.Log (e.EventType.ToString ()); // OnVMSuspended (new Event (e, State.Suspend)); // break; // } //} switch (e.EventType) { case MDS.EventType.VMStart: if (VMStateChanged != null) { VMStateChanged(new Event(e, State.Start)); } break; case MDS.EventType.VMDeath: if (VMStateChanged != null) { VMStateChanged(new Event(e, State.Stop)); } ret = false; break; case MDS.EventType.VMDisconnect: if (VMStateChanged != null) { VMStateChanged(new Event(e, State.Disconnect)); } ret = false; break; case MDS.EventType.AppDomainCreate: if (AppDomainLoaded != null) { AppDomainLoaded(new Event(e)); } appdomains.Add(((MDS.AppDomainCreateEvent)e).Domain); break; case MDS.EventType.AppDomainUnload: if (AppDomainUnloaded != null) { AppDomainUnloaded(new Event(e)); } if (appdomains.Contains(((MDS.AppDomainUnloadEvent)e).Domain)) { appdomains.Remove(((MDS.AppDomainUnloadEvent)e).Domain); } break; case MDS.EventType.ThreadStart: if (ThreadStarted != null) { ThreadStarted(new Event(e)); } break; case MDS.EventType.ThreadDeath: if (ThreadStopped != null) { ThreadStopped(new Event(e)); } break; case MDS.EventType.AssemblyLoad: if (AssemblyLoaded != null) { var ev = new AssemblyEvent(e); AssemblyLoaded(ev); if (!ev.Cancel && !filteredAssemblies.Contains(((MDS.AssemblyLoadEvent)e).Assembly.Id)) { var tr = vm.CreateTypeLoadRequest(); tr.AssemblyFilter = new MDS.AssemblyMirror [] { ((MDS.AssemblyLoadEvent)e).Assembly }; tr.Enable(); filteredAssemblies.Add(((MDS.AssemblyLoadEvent)e).Assembly.Id); } } break; case MDS.EventType.AssemblyUnload: if (AssemblyUnloaded != null) { AssemblyUnloaded(new AssemblyEvent(e)); } break; case MDS.EventType.TypeLoad: if (TypeLoaded != null) { TypeLoaded(new TypeEvent(e)); } break; case MDS.EventType.Breakpoint: if (BreakpointHit != null) { BreakpointHit(new BreakpointEvent(e)); } break; case MDS.EventType.Step: if (Stepped != null) { Stepped(new Event(e)); } break; case MDS.EventType.MethodEntry: LogProvider.Log(((MDS.MethodEntryEvent)e).Method.FullName); break; default: LogProvider.Log("Unknown event: " + e.GetType()); break; } if (policy != MDS.SuspendPolicy.None) { Resume(); } return(ret); }