예제 #1
0
        public override Task <GetChildrenResponse> GetChildren(
            GetChildrenRequest request, ServerCallContext context)
        {
            var value    = valueStore.GetObject(request.Value.Id);
            var children = value.GetChildren(request.Offset, request.Count);
            var response = new GetChildrenResponse();

            for (uint n = 0; n < children.Count; ++n)
            {
                RemoteValue child = children[(int)n];
                if (child != null)
                {
                    response.Children[n + request.Offset] =
                        GrpcFactoryUtils.CreateValue(child, valueStore.AddObject(child));
                }
            }

            // (internal): Special case for pointers. LLDB names them $"*{value.GetName()}", but
            // Visual Studio just shows an empty name.
            if (value.TypeIsPointerType() && response.Children.ContainsKey(0) &&
                response.Children[0].Name == $"*{value.GetName()}")
            {
                response.Children[0].Name = string.Empty;
            }

            return(Task.FromResult(response));
        }
예제 #2
0
        public override Task <EvaluateExpressionLldbEvalResponse> EvaluateExpressionLldbEval(
            EvaluateExpressionLldbEvalRequest request, ServerCallContext context)
        {
            var value = valueStore.GetObject(request.Value.Id);
            IDictionary <string, SbValue> contextValues = new Dictionary <string, SbValue>();

            if (request.ContextVariables != null)
            {
                foreach (var contextVariable in request.ContextVariables)
                {
                    var val = valueStore.GetObject(contextVariable.Value.Id);

                    if (val != null)
                    {
                        contextValues.Add(contextVariable.Name, val.GetSbValue());
                    }
                }
            }
            var result   = value.EvaluateExpressionLldbEval(request.Expression, contextValues);
            var response = new EvaluateExpressionLldbEvalResponse();

            if (result != null)
            {
                response.Value = GrpcFactoryUtils.CreateValue(result, valueStore.AddObject(result));
            }
            return(Task.FromResult(response));
        }
예제 #3
0
        public override Task <GetChildMemberWithNameResponse> GetChildMemberWithName(
            GetChildMemberWithNameRequest request, ServerCallContext context)
        {
            var value    = valueStore.GetObject(request.Value.Id);
            var child    = value.GetChildMemberWithName(request.Name);
            var response = new GetChildMemberWithNameResponse();

            if (child != null)
            {
                response.Child = GrpcFactoryUtils.CreateValue(child, valueStore.AddObject(child));
            }
            return(Task.FromResult(response));
        }
예제 #4
0
        public override Task <CloneResponse> Clone(CloneRequest request, ServerCallContext context)
        {
            RemoteValue value       = valueStore.GetObject(request.Value.Id);
            RemoteValue cloneResult = value.Clone();
            var         response    = new CloneResponse();

            if (cloneResult != null)
            {
                response.CloneResult =
                    GrpcFactoryUtils.CreateValue(cloneResult, valueStore.AddObject(cloneResult));
            }
            return(Task.FromResult(response));
        }
예제 #5
0
        public override Task <GetValueForExpressionPathResponse> GetValueForExpressionPath(
            GetValueForExpressionPathRequest request, ServerCallContext context)
        {
            var value      = valueStore.GetObject(request.Value.Id);
            var childValue = value.GetValueForExpressionPath(request.ExpressionPath);
            GetValueForExpressionPathResponse response = new GetValueForExpressionPathResponse();

            if (childValue != null)
            {
                response.Value = GrpcFactoryUtils.CreateValue(
                    childValue, valueStore.AddObject(childValue));
            }
            return(Task.FromResult(response));
        }
예제 #6
0
        public override Task <AddressOfResponse> AddressOf(
            AddressOfRequest request, ServerCallContext context)
        {
            var value    = valueStore.GetObject(request.Value.Id);
            var address  = value.AddressOf();
            var response = new AddressOfResponse();

            if (address != null)
            {
                response.AddressValue = GrpcFactoryUtils.CreateValue(
                    address, valueStore.AddObject(address));
            }
            return(Task.FromResult(response));
        }
예제 #7
0
        public override Task <DereferenceResponse> Dereference(
            DereferenceRequest request, ServerCallContext context)
        {
            RemoteValue value             = valueStore.GetObject(request.Value.Id);
            RemoteValue dereferenceResult = value.Dereference();
            var         response          = new DereferenceResponse();

            if (dereferenceResult != null)
            {
                response.DereferenceResult = GrpcFactoryUtils.CreateValue(
                    dereferenceResult, valueStore.AddObject(dereferenceResult));
            }
            return(Task.FromResult(response));
        }
예제 #8
0
        public override Task <EvaluateExpressionLldbEvalResponse> EvaluateExpressionLldbEval(
            EvaluateExpressionLldbEvalRequest request, ServerCallContext context)
        {
            RemoteFrame frame = frameStore.GetObject(request.Frame.Id);
            RemoteValue value = frame.EvaluateExpressionLldbEval(request.Expression);

            var response = new EvaluateExpressionLldbEvalResponse();

            if (value != null)
            {
                response.Value = GrpcFactoryUtils.CreateValue(value, valueStore.AddObject(value));
            }
            return(Task.FromResult(response));
        }
예제 #9
0
        public override Task <GetRegistersResponse> GetRegisters(GetRegistersRequest request,
                                                                 ServerCallContext context)
        {
            RemoteFrame        frame     = frameStore.GetObject(request.Frame.Id);
            List <RemoteValue> registers = frame.GetRegisters();

            var response = new GetRegistersResponse();

            response.Registers.Add(
                registers.Select(s => GrpcFactoryUtils.CreateValue(
                                     s, valueStore.AddObject(s))).ToList());

            return(Task.FromResult(response));
        }
예제 #10
0
        public override Task <EvaluateExpressionResponse> EvaluateExpression(
            EvaluateExpressionRequest request, ServerCallContext context)
        {
            var value            = valueStore.GetObject(request.Value.Id);
            var expressionResult =
                value.EvaluateExpression(request.Expression);
            var response = new EvaluateExpressionResponse();

            if (expressionResult != null)
            {
                response.ExpressionResult = GrpcFactoryUtils.CreateValue(
                    expressionResult, valueStore.AddObject(expressionResult));
            }
            return(Task.FromResult(response));
        }
예제 #11
0
        public override Task <CreateValueFromAddressResponse> CreateValueFromAddress(
            CreateValueFromAddressRequest request, ServerCallContext context)
        {
            RemoteValue value            = valueStore.GetObject(request.Value.Id);
            RemoteValue expressionResult = value.CreateValueFromAddress(
                request.Name, request.Address, typeStore.GetObject(request.Type.Id));
            var response = new CreateValueFromAddressResponse();

            if (expressionResult != null)
            {
                response.ExpressionResult = GrpcFactoryUtils.CreateValue(
                    expressionResult, valueStore.AddObject(expressionResult));
            }
            return(Task.FromResult(response));
        }
예제 #12
0
        public override Task <GetValueForVariablePathResponse> GetValueForVariablePath(
            GetValueForVariablePathRequest request,
            ServerCallContext context)
        {
            RemoteFrame frame = frameStore.GetObject(request.Frame.Id);
            RemoteValue value = frame.GetValueForVariablePath(request.VariablePath);

            var response = new GetValueForVariablePathResponse();

            if (value != null)
            {
                response.Value = GrpcFactoryUtils.CreateValue(value, valueStore.AddObject(value));
            }
            return(Task.FromResult(response));
        }
예제 #13
0
        public override Task <GetVariablesResponse> GetVariables(GetVariablesRequest request,
                                                                 ServerCallContext context)
        {
            RemoteFrame        frame     = frameStore.GetObject(request.Frame.Id);
            List <RemoteValue> variables =
                frame.GetVariables(
                    request.Arguments, request.Locals, request.Statics, request.OnlyInScope);

            var response = new GetVariablesResponse();

            response.Variables.Add(
                variables.Select(s => GrpcFactoryUtils.CreateValue(
                                     s, valueStore.AddObject(s))).ToList());

            return(Task.FromResult(response));
        }
예제 #14
0
        public override Task <FindValueResponse> FindValue(FindValueRequest request,
                                                           ServerCallContext context)
        {
            RemoteFrame frame    = frameStore.GetObject(request.Frame.Id);
            RemoteValue variable = frame.FindValue(request.VariableName,
                                                   request.ValueType.ConvertTo <LldbApi.ValueType>());

            var response = new FindValueResponse();

            if (variable != null)
            {
                response.Variable = GrpcFactoryUtils.CreateValue(
                    variable, valueStore.AddObject(variable));
            }

            return(Task.FromResult(response));
        }
예제 #15
0
        public override Task <GetCachedViewResponse> GetCachedView(
            GetCachedViewRequest request, ServerCallContext context)
        {
            var value = valueStore.GetObject(request.Value.Id);

            value.SetFormat(request.Format.ConvertTo <LldbApi.ValueFormat>());
            var response = new GetCachedViewResponse
            {
                ValueInfo = CreateValueInfoAndUpdateStores(value)
            };
            var addressOf = value.AddressOf();

            if (addressOf != null)
            {
                response.AddressValue = GrpcFactoryUtils.CreateValue(
                    addressOf, valueStore.AddObject(addressOf));
                response.AddressInfo = CreateValueInfoAndUpdateStores(addressOf);
            }
            return(Task.FromResult(response));
        }