private void GCStaticRootsImpl(GCRoot gcroot) { ulong target = gcroot.Heap.GetObjectsOfType("TargetType").Single(); GCRootPath[] paths = gcroot.EnumerateGCRoots(target, false, CancellationToken.None).ToArray(); Assert.Single(paths); GCRootPath rootPath = paths[0]; AssertPathIsCorrect(gcroot.Heap, rootPath.Path.ToArray(), rootPath.Path.First().Address, target); }
public void GCRootsIndirectHandles() { using DataTarget dataTarget = TestTargets.GCRoot2.LoadFullDump(); using ClrRuntime runtime = dataTarget.ClrVersions.Single().CreateRuntime(); ClrHeap heap = runtime.Heap; GCRoot gcroot = new GCRoot(heap); ulong target = heap.GetObjectsOfType("IndirectTarget").Single(); _ = Assert.Single(gcroot.EnumerateGCRoots(target, unique: true, 8, CancellationToken.None)); GCRootPath path = Assert.Single(gcroot.EnumerateGCRoots(target, unique: true, 1, CancellationToken.None)); var paths = gcroot.EnumerateGCRoots(target, unique: false, 1, CancellationToken.None).ToArray(); Assert.Equal(2, gcroot.EnumerateGCRoots(target, unique: false, 1, CancellationToken.None).Count()); Assert.Equal(2, gcroot.EnumerateGCRoots(target, unique: false, 8, CancellationToken.None).Count()); }