/// <summary> /// Connects the threads. /// </summary> public void ConnectThreads() { foreach (var kvp in ThreadToExceptionMapping) { var thread = Threads[kvp.Key]; var exception = Objects[kvp.Value]; thread.CurrentException = exception; } foreach (var kvp in ThreadToRootMapping) { var thread = Threads[kvp.Key]; var roots = Roots.Where(r => kvp.Value.Contains(r.Key)).Select(x => x.Value).ToList(); foreach (var dumpObjectRoot in roots) { thread.AddRoot(dumpObjectRoot); dumpObjectRoot.AddThread(thread); } } foreach (var kvp in ThreadToObjectMapping) { var thread = Threads[kvp.Key]; foreach (var addr in kvp.Value) { if (Roots.TryGetValue(addr, out var o)) { thread.AddRoot(o); o.AddThread(thread); } else { ; } } } }