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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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;
            }
        }