Ejemplo n.º 1
0
 public void DoForEachAppDomain(AppDomainAction appDomainAction)
 {
     if (m_eng.Capabilities.AppDomains)
     {
         _WP.Commands.Debugging_TypeSys_AppDomains.Reply domainsReply = m_eng.GetAppDomains();
         if (domainsReply != null)
         {
             foreach (uint id in domainsReply.m_data)
             {
                 _WP.Commands.Debugging_Resolve_AppDomain.Reply reply = m_eng.ResolveAppDomain(id);
                 if (reply != null)
                 {
                     appDomainAction(new AppDomainInfo(id, reply));
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
 public AppDomainInfo(uint id, _WP.Commands.Debugging_Resolve_AppDomain.Reply reply)
 {
     m_id = id;
     m_reply = reply;
 }
Ejemplo n.º 3
0
 public AppDomainInfo(uint id, _WP.Commands.Debugging_Resolve_AppDomain.Reply reply)
 {
     m_id    = id;
     m_reply = reply;
 }
Ejemplo n.º 4
0
        public bool UpdateAssemblies()
        {
            uint[] assemblies = null;
            List <ManagedCallbacks.ManagedCallback> callbacks = new System.Collections.Generic.List <ManagedCallbacks.ManagedCallback> ();

            if (this.Process.Engine.Capabilities.AppDomains)
            {
                WireProtocol.Commands.Debugging_Resolve_AppDomain.Reply reply = this.Process.Engine.ResolveAppDomain(m_id);

                if (reply != null)
                {
                    m_name     = reply.Name;
                    assemblies = reply.m_data;
                }

                if (assemblies == null)
                {
                    //assembly is already unloaded
                    assemblies = new uint[0];
                }
            }
            else
            {
                WireProtocol.Commands.Debugging_Resolve_Assembly[] reply = this.Process.Engine.ResolveAllAssemblies();
                assemblies = new uint[reply.Length];

                for (int iAssembly = 0; iAssembly < assemblies.Length; iAssembly++)
                {
                    assemblies [iAssembly] = reply [iAssembly].m_idx;
                }
            }

            //Convert Assembly Index to Idx.
            for (uint iAssembly = 0; iAssembly < assemblies.Length; iAssembly++)
            {
                assemblies [iAssembly] = TinyCLR_TypeSystem.IdxAssemblyFromIndex(assemblies [iAssembly]);
            }

            //Unload dead assemblies
            for (int iAssembly = m_assemblies.Count - 1; iAssembly >= 0; iAssembly--)
            {
                CorDebugAssembly assembly = (CorDebugAssembly)m_assemblies [iAssembly];

                if (Array.IndexOf(assemblies, assembly.Idx) < 0)
                {
                    callbacks.Add(new ManagedCallbacks.ManagedCallbackAssembly(assembly, ManagedCallbacks.ManagedCallbackAssembly.EventType.UnloadModule));
                    callbacks.Add(new ManagedCallbacks.ManagedCallbackAssembly(assembly, ManagedCallbacks.ManagedCallbackAssembly.EventType.UnloadAssembly));

                    m_assemblies.RemoveAt(iAssembly);
                }
            }

            //Load new assemblies
            for (int i = 0; i < assemblies.Length; i++)
            {
                uint idx = assemblies [i];

                CorDebugAssembly assembly = AssemblyFromIdx(idx);

                if (assembly == null)
                {
                    //Get the primary assembly from CorDebugProcess
                    assembly = this.Process.AssemblyFromIdx(idx);

                    Debug.Assert(assembly != null);

                    //create a new CorDebugAssemblyInstance
                    assembly = assembly.CreateAssemblyInstance(this);

                    Debug.Assert(assembly != null);

                    m_assemblies.Add(assembly);

                    //cpde expects mscorlib to be the first assembly it hears about
                    int index = (assembly.Name == "mscorlib") ? 0 : callbacks.Count;

                    callbacks.Insert(index, new ManagedCallbacks.ManagedCallbackAssembly(assembly, ManagedCallbacks.ManagedCallbackAssembly.EventType.LoadAssembly));
                    callbacks.Insert(index + 1, new ManagedCallbacks.ManagedCallbackAssembly(assembly, ManagedCallbacks.ManagedCallbackAssembly.EventType.LoadModule));
                }
            }

            this.Process.EnqueueEvents(callbacks);

            return(callbacks.Count > 0);
        }