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)); } } } } }
public AppDomainInfo(uint id, _WP.Commands.Debugging_Resolve_AppDomain.Reply reply) { m_id = id; m_reply = reply; }
public AppDomainInfo(uint id, _WP.Commands.Debugging_Resolve_AppDomain.Reply reply) { m_id = id; m_reply = reply; }
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); }