Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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);
        }