public IEnumerable WalkObject()

in src/Microsoft.Diagnostics.Runtime/GCDesc.cs [22:75]


        public IEnumerable<(ulong ReferencedObject, int Offset)> WalkObject(byte[] buffer, int size)
        {
            DebugOnly.Assert(size >= IntPtr.Size);

            int series = GetNumSeries();
            int highest = GetHighestSeries();
            int curr = highest;

            if (series > 0)
            {
                int lowest = GetLowestSeries();
                do
                {
                    long offset = GetSeriesOffset(curr);
                    long stop = offset + GetSeriesSize(curr) + size;

                    while (offset < stop)
                    {
                        ulong ret = new Span<byte>(buffer).AsPointer((int)offset);
                        if (ret != 0)
                            yield return (ret, (int)offset);

                        offset += IntPtr.Size;
                    }

                    curr -= s_GCDescSize;
                } while (curr >= lowest);
            }
            else
            {
                long offset = GetSeriesOffset(curr);

                while (offset < size - IntPtr.Size)
                {
                    for (int i = 0; i > series; i--)
                    {
                        int nptrs = GetPointers(curr, i);
                        int skip = GetSkip(curr, i);

                        long stop = offset + (nptrs * IntPtr.Size);
                        do
                        {
                            ulong ret = new Span<byte>(buffer).AsPointer((int)offset);
                            if (ret != 0)
                                yield return (ret, (int)offset);

                            offset += IntPtr.Size;
                        } while (offset < stop);

                        offset += skip;
                    }
                }
            }
        }