/// <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
                    {
                        ;
                    }
                }
            }
        }