Beispiel #1
0
        public override IEnumerable <ClrRoot> EnumerateRoots(bool enumerateStatics)
        {
            // Stack objects.
            foreach (var thread in m_runtime.Threads)
            {
                foreach (var stackRef in m_runtime.EnumerateStackRoots(thread))
                {
                    yield return(stackRef);
                }
            }

            // Static Variables.
            foreach (var root in m_runtime.EnumerateStaticRoots(enumerateStatics))
            {
                yield return(root);
            }

            // Handle Table.
            foreach (ClrRoot root in m_runtime.EnumerateHandleRoots())
            {
                yield return(root);
            }

            // Finalizer Queue.
            ClrAppDomain domain = m_runtime.AppDomains[0];

            foreach (ulong obj in m_runtime.EnumerateFinalizerQueue())
            {
                ClrType type = GetObjectType(obj);
                if (type == null)
                {
                    continue;
                }

                yield return(new RhFinalizerRoot(obj, type, domain, "finalizer root"));
            }
        }