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; }
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; // } //} }
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); }
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); }
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); } }
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; } } }
public static bool IsTaskCompletionSource(this ClrInstance continuation, CausalityContext context) { return(context.Registry.IsTaskCompletionSource(continuation.Type)); }
public static bool IsCompletedTaskContinuation(this ClrInstance continuation, CausalityContext context) { return(context.Registry.IsTaskCompletionSentinel(continuation)); }
public static bool IsTaskWhenAll(this ClrInstance instance, CausalityContext context) { return(context.Registry.IsTaskWhenAll(instance)); }
public static bool IsOfType(this ClrInstance instance, Type type, CausalityContext context) { return(instance.IsOfType(type, context.Registry)); }