Esempio n. 1
0
        public void LoadFromCausalityContext(CausalityContext context)
        {
            Graph graph = new Graph();

            foreach (var node in context.Nodes)
            {
                if (node.Dependencies.Count == 0 && node.Dependents.Count == 0)
                {
                    continue;
                }

                var graphNode = graph.AddNode(node.Id);
                graphNode.LabelText = node.CreateDisplayText();

                foreach (var dependency in node.Dependencies)
                {
                    graph.AddEdge(
                        source: node.Id,
                        target: dependency.Id);
                }
            }

            graph.LayoutAlgorithmSettings.PackingMethod = Microsoft.Msagl.Core.Layout.PackingMethod.Columns;
            //graph.Attr.LayerDirection = LayerDirection.None;
            graph.Attr.AspectRatio = 1;
            graphViewer.Graph      = graph;
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            //var dumpPath = args.Length > 0 ? args[0] : @"E:\Dumps\FromDmitry\BatmonService-MW1AAPE3AE9F979-27484-55d99747-c1fe-d35b-d6b0-ae122faa04a9.dmp";
            //var dumpPath = args.Length > 0 ? args[0] : @"C:\Users\seteplia\AppData\Local\Temp\BasicDatastructures.DMP";
            //var dumpPath = args.Length > 0 ? args[0] : @"C:\Sources\GitHub\Dumps4AsyncDbg\AsyncReaderWriterLockDeadlock_64.DMP";

            var dumpPath = args.Length > 0 ? args[0] : @"C:\Sources\GitHub\Dumps4AsyncDbg\AsyncReaderWriterLockDeadLockWithSyncContext_64.DMP";

            //var dumpPath = args.Length > 0 ? args[0] : @"C:\Sources\GitHub\Dumps4AsyncDbg\BlockingTaskCompletionSourcesContinuation_64.DMP";

            //var dumpPath = args.Length > 0 ? args[0] : @"C:\Sources\GitHub\Dumps4AsyncDbg\RealDumps\1_xunit.console.exe.dmp";

            //var dumpPath = args.Length > 0 ? args[0] : @"C:\Sources\GitHub\Dumps4AsyncDbg\ManualResetEventSlimOnTheStack_64.DMP";
            //var dumpPath = args.Length > 0 ? args[0] : @"E:\Dumps\UnhandledFailure (2)\UnhandledFailure.dmp";
            //var dumpPath = args.Length > 0 ? args[0] : @"E:\Dumps\QCacheService.exe_190425_034613\QCacheService.exe_190425_034613.dmp";
            //var dumpPath = args.Length > 0 ? args[0] : @"E:\Dumps\QuickBuild(16056)\QuickBuild(16056).dmp";
            //var dumpPath = args.Length > 0 ? args[0] : @"F:\Sources\GitHub\AsyncDbg\src\SampleDumps\BasicDatastructures\DeepStackTraceInMainThread.DMP";
            //var dumpPath = args.Length > 0 ? args[0] : @"E:\Dumps\xunit.console (2).DMP";

            // "E:\Dumps\xunit.console (2).DMP"
            // C:\Users\seteplia\AppData\Local\Temp\BasicDatastructures.DMP
            if ((File.GetAttributes(dumpPath) & FileAttributes.Directory) == FileAttributes.Directory)
            {
                AnalyzeDumpsAt(dumpPath);
            }
            else
            {
                var context = CausalityContext.LoadCausalityContextFromDump(dumpPath);
                context.SaveDgml(dumpPath + ".dgml");
                return;
            }

            //string? line = null;
            //while ((line = Console.ReadLine()) != null)
            //{
            //    try
            //    {
            //        var id = ulong.Parse(line.Trim());
            //        if (context.TryGetNodeAt(id, out var node))
            //        {
            //            Console.WriteLine($"Found node '{node.ToString()}' at for {id}");
            //        }
            //        else
            //        {
            //            Console.WriteLine($"Could not find node at for {id}");
            //        }
            //    }
            //    catch (Exception e)
            //    {
            //        Console.WriteLine(e);
            //        throw;
            //    }
            //}
        }
Esempio n. 3
0
        public void CheckTheDump()
        {
            string path = @"E:\Dumps\1_xunit.console.exe.dmp";
            //string path = @"C:\Users\seteplia\AppData\Local\Temp\xunit.console (2).DMP";

            var contextNew = CausalityContext.LoadCausalityContextFromDump(path);
            var newContent = contextNew.SaveDgml(path + ".dgml", whatIf: false);

            //var newContent = contextNew.OverallStats(path + ".dgml");
            Console.WriteLine(newContent);
        }
Esempio n. 4
0
        private async void OnClickInitialize(object sender, RoutedEventArgs e)
        {
            var context = await RunStaAsync(() =>
            {
                var result = CausalityContext.LoadCausalityContextFromDump(null);
                foreach (var node in result.Nodes)
                {
                    var displayString = node.CreateDisplayText();
                }

                return(result);
            });

            ViewerControl.LoadFromCausalityContext(context);
        }
Esempio n. 5
0
        private void CheckDgmlGeneration(string dumpFilePath)
        {
            var contextNew = CausalityContext.LoadCausalityContextFromDump(dumpFilePath);
            var dgmlPath   = dumpFilePath + ".dgml";
            var newContent = contextNew.SaveDgml(dgmlPath, whatIf: true);

            if (TryGetBaseLine(dumpFilePath, out var oldContent))
            {
                Assert.AreEqual(oldContent, newContent);
            }
            else
            {
                File.WriteAllText(dgmlPath, newContent);
            }
        }
Esempio n. 6
0
 static void AnalyzeDumpsAt(string path)
 {
     foreach (var dumpFile in Directory.EnumerateFiles(path, "*.dmp"))
     {
         Console.WriteLine($"Analysing '{dumpFile}'");
         try
         {
             var context = CausalityContext.LoadCausalityContextFromDump(dumpFile);
             context.SaveDgml(dumpFile + ".dgml");
         }
         catch (Exception e)
         {
             Console.WriteLine("Failed analyzing the dump: " + e);
             break;
         }
     }
 }
Esempio n. 7
0
 public static bool IsTaskCompletionSource(this ClrInstance continuation, CausalityContext context)
 {
     return(context.Registry.IsTaskCompletionSource(continuation.Type));
 }
Esempio n. 8
0
 public static bool IsCompletedTaskContinuation(this ClrInstance continuation, CausalityContext context)
 {
     return(context.Registry.IsTaskCompletionSentinel(continuation));
 }
Esempio n. 9
0
 public static bool IsTaskWhenAll(this ClrInstance instance, CausalityContext context)
 {
     return(context.Registry.IsTaskWhenAll(instance));
 }
Esempio n. 10
0
 public static bool IsOfType(this ClrInstance instance, Type type, CausalityContext context)
 {
     return(instance.IsOfType(type, context.Registry));
 }