public override void Visit(HeapRootsEvent ev) { for (int i = 0; i < ev.Roots.Count; ++i) { var root = ev.Roots[i]; ProcessNewRoot(root.ObjectPointer, root.SlotPointer); } }
public override void Visit(HeapRootsEvent ev) { if (currentHeapshot != null) { foreach (var root in ev.Roots) { currentHeapshot.Roots[root.ObjectPointer] = root.Attributes.ToString(); } } }
public override void Visit(HeapRootsEvent ev) { if (currentHeapshot != null) { foreach (var root in ev.Roots) { var index = rootsEventsBinary.BinarySearch(root.AddressPointer); if (index < 0) { index = ~index; if (index == 0) { Console.WriteLine($"This should not happen. Root is before any HeapRootsEvent {root.AddressPointer}."); continue; } var rootReg = rootsEvents[rootsEventsBinary[index - 1]]; if (rootReg.RootPointer < root.AddressPointer && rootReg.RootPointer + rootReg.RootSize >= root.AddressPointer) { currentHeapshot.Roots[root.ObjectPointer] = rootReg; } else { Console.WriteLine($"This should not happen. Closest root is too small({root.AddressPointer}):"); Console.WriteLine(rootReg); } } else { //We got exact match currentHeapshot.Roots[root.ObjectPointer] = rootsEvents[root.AddressPointer]; } } } else { //Console.WriteLine("This should not happen. HeapRootsEvent outside HeapshotBegin/End."); } }
public virtual void Visit(HeapRootsEvent ev) { }