示例#1
0
        public void TestEnumerateRefsWithFields()
        {
            using DataTarget dataTarget = TestTargets.GCRoot.LoadFullDump();
            using ClrRuntime runtime    = dataTarget.ClrVersions.Single().CreateRuntime();
            ClrHeap heap = runtime.Heap;

            ClrObject    singleRef = FindSingleRefPointingToTarget(heap);
            ClrReference fieldRef  = singleRef.EnumerateReferencesWithFields(considerDependantHandles: true).Single();

            Assert.True(fieldRef.IsDependentHandle);
            Assert.False(fieldRef.IsField);

            singleRef = FindSingleRefPointingToType(heap, "TripleRef");
            fieldRef  = singleRef.EnumerateReferencesWithFields(considerDependantHandles: false).Single();

            Assert.False(fieldRef.IsDependentHandle);
            Assert.True(fieldRef.IsField);
            Assert.NotNull(fieldRef.Field);
            Assert.Equal("Item1", fieldRef.Field.Name);
        }
示例#2
0
            static void Accumulate(ClrObject clrObject, HashSet <UInt64> visited, ref ulong size)
            {
                if (clrObject.IsNull)
                {
                    return;
                }
                if (visited.Contains(clrObject.Address))
                {
                    return;
                }

                size += clrObject.Size;
                visited.Add(clrObject.Address);
                foreach (var childReference in clrObject.EnumerateReferencesWithFields())
                {
                    Accumulate(childReference.Object, visited, ref size);
                }
            }
示例#3
0
 private void PopulateChildren(ClrObject @object)
 {
     Children = @object.EnumerateReferencesWithFields()
                .Where(r => !r.Object.IsNull)// && !_owner.Visited.Contains(r.Object.Address))
                .Select(o => new ClrGraphNode(_owner, o));
 }