protected override ThreadsResponse HandleThreadsRequest(ThreadsArguments arguments) { ThreadsResponse res = new ThreadsResponse(); foreach (var i in debugged.Threads) { VSCodeThread t = (VSCodeThread)i.Value; res.Threads.Add(t.Thread); } return(res); }
protected override IThread HandleTheadStarted(int threadHash) { var t = new VSCodeThread(this, threadHash, null); da.Protocol.SendEvent(new ThreadEvent() { Reason = ThreadEvent.ReasonValue.Started, ThreadId = t.Thread.Id }); return(t); }
public VSCodeStackFrame(StackFrameInfo info, VSCodeThread thread, int index) { this.info = info; this.thread = thread; this.Index = index; frame = new StackFrame() { Name = info.MethodName, Id = GetHashCode() }; FileLinePositionSpan span = default; if (!string.IsNullOrEmpty(info.DocumentName)) { frame.Source = new Source() { Name = Path.GetFileName(info.DocumentName), Path = info.DocumentName }; frame.Line = info.StartLine + 1; frame.EndLine = info.EndLine + 1; frame.Column = info.StartColumn + 1; frame.EndColumn = info.EndColumn + 1; if (File.Exists(info.DocumentName)) { using (var stream = File.OpenRead(info.DocumentName)) { try { SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(SourceText.From(stream), path: info.DocumentName); TextLine textLine = syntaxTree.GetText().Lines[info.StartLine]; Location location = syntaxTree.GetLocation(textLine.Span); SyntaxTree sourceTree = location.SourceTree; SyntaxNode node = location.SourceTree.GetRoot().FindNode(location.SourceSpan, true, true); bool isLambda = GetParentMethod <LambdaExpressionSyntax>(node.Parent) != null; BaseMethodDeclarationSyntax method = GetParentMethod <MethodDeclarationSyntax>(node.Parent); if (method == null) { method = GetParentMethod <ConstructorDeclarationSyntax>(node.Parent); } if (method != null) { span = syntaxTree.GetLineSpan(method.FullSpan); } } catch { } } } } args = new VSCodeScope(this, frame, Scope.PresentationHintValue.Arguments, info.ArgumentCount, 0, span); locals = new VSCodeScope(this, frame, Scope.PresentationHintValue.Locals, info.LocalVariables != null ? info.LocalVariables.Length - info.ArgumentCount : 0, info.ArgumentCount, span); foreach (var i in args.Variables) { propertyMapping[i.Variable.Name] = i; } foreach (var i in locals.Variables) { propertyMapping[i.Variable.Name] = i; } }