示例#1
0
        public List <RemoteValue> GetChildren(uint offset, uint count)
        {
            var values = Enumerable.Repeat <RemoteValue>(null, (int)count).ToList();
            GetChildrenResponse response = null;

            if (connection.InvokeRpc(() =>
            {
                response = client.GetChildren(
                    new GetChildrenRequest
                {
                    Value = grpcSbValue,
                    Offset = offset,
                    Count = count
                });
            }))
            {
                for (uint n = 0; n < count; ++n)
                {
                    GrpcSbValue sbValue;
                    if (response.Children != null &&
                        response.Children.TryGetValue(n + offset, out sbValue) &&
                        sbValue.Id != 0)
                    {
                        values[(int)n] = valueFactory.Create(connection, sbValue);
                    }
                }
            }

            return(values);
        }
示例#2
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));
        }