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); }
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); } }
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)); }