コード例 #1
0
        /// <summary>
        /// Evaluates a variable expression in the context of the stopped
        /// debugger.  This method decomposes the variable expression to
        /// walk the cached variable data for the specified stack frame.
        /// </summary>
        /// <param name="variableExpression">The variable expression string to evaluate.</param>
        /// <param name="stackFrameId">The ID of the stack frame in which the expression should be evaluated.</param>
        /// <returns>A VariableDetails object containing the result.</returns>
        public VariableDetails GetVariableFromExpression(string variableExpression, int stackFrameId)
        {
            // Break up the variable path
            string[] variablePathParts = variableExpression.Split('.');

            VariableDetails resolvedVariable           = null;
            IEnumerable <VariableDetails> variableList = this.currentVariables;

            foreach (var variableName in variablePathParts)
            {
                if (variableList == null)
                {
                    // If there are no children left to search, break out early
                    return(null);
                }

                resolvedVariable =
                    variableList.FirstOrDefault(
                        v =>
                        string.Equals(
                            v.Name,
                            variableExpression,
                            StringComparison.InvariantCultureIgnoreCase));

                if (resolvedVariable != null &&
                    resolvedVariable.IsExpandable)
                {
                    // Continue by searching in this variable's children
                    variableList = this.GetVariables(resolvedVariable.Id);
                }
            }

            return(resolvedVariable);
        }
コード例 #2
0
        /// <summary>
        /// If this variable instance is expandable, this method returns the
        /// details of its children.  Otherwise it returns an empty array.
        /// </summary>
        /// <returns></returns>
        public override VariableDetailsBase[] GetChildren(ILogger logger)
        {
            VariableDetails[] childVariables = null;

            if (this.IsExpandable)
            {
                if (this.cachedChildren == null)
                {
                    this.cachedChildren = GetChildren(this.valueObject, logger);
                }

                return(this.cachedChildren);
            }
            else
            {
                childVariables = new VariableDetails[0];
            }

            return(childVariables);
        }
コード例 #3
0
        /// <summary>
        /// If this variable instance is expandable, this method returns the
        /// details of its children.  Otherwise it returns an empty array.
        /// </summary>
        /// <returns></returns>
        public VariableDetails[] GetChildren()
        {
            VariableDetails[] childVariables = null;

            if (this.IsExpandable)
            {
                if (this.cachedChildren == null)
                {
                    this.cachedChildren = GetChildren(this.valueObject);
                }

                return(this.cachedChildren);
            }
            else
            {
                childVariables = new VariableDetails[0];
            }

            return(childVariables);
        }
コード例 #4
0
        private async Task FetchVariables()
        {
            this.nextVariableId   = VariableDetails.FirstVariableId;
            this.currentVariables = new List <VariableDetails>();

            PSCommand psCommand = new PSCommand();

            psCommand.AddCommand("Get-Variable");
            psCommand.AddParameter("Scope", "Local");

            var results = await this.powerShellContext.ExecuteCommand <PSVariable>(psCommand);

            foreach (var variable in results)
            {
                var details = new VariableDetails(variable);
                details.Id = this.nextVariableId;
                this.currentVariables.Add(details);

                this.nextVariableId++;
            }
        }
コード例 #5
0
        /// <summary>
        /// Gets the list of variables that are children of the scope or variable
        /// that is identified by the given referenced ID.
        /// </summary>
        /// <param name="variableReferenceId"></param>
        /// <returns>An array of VariableDetails instances which describe the requested variables.</returns>
        public VariableDetails[] GetVariables(int variableReferenceId)
        {
            VariableDetails[] childVariables = null;

            if (variableReferenceId >= VariableDetails.FirstVariableId)
            {
                int correctedId =
                    (variableReferenceId - VariableDetails.FirstVariableId);

                VariableDetails parentVariable =
                    this.currentVariables[correctedId];

                if (parentVariable.IsExpandable)
                {
                    childVariables = parentVariable.GetChildren();

                    foreach (var child in childVariables)
                    {
                        this.currentVariables.Add(child);
                        child.Id = this.nextVariableId;
                        this.nextVariableId++;
                    }
                }
                else
                {
                    childVariables = new VariableDetails[0];
                }
            }
            else
            {
                // TODO: Get variables for the desired scope ID
                childVariables = this.currentVariables.ToArray();
            }

            return(childVariables);
        }
コード例 #6
0
        private async Task <VariableContainerDetails> FetchVariableContainer(
            string scope,
            VariableContainerDetails autoVariables)
        {
            PSCommand psCommand = new PSCommand();

            psCommand.AddCommand("Get-Variable");
            psCommand.AddParameter("Scope", scope);

            var scopeVariableContainer =
                new VariableContainerDetails(this.nextVariableId++, "Scope: " + scope);

            this.variables.Add(scopeVariableContainer);

            var results = await this.powerShellContext.ExecuteCommand <PSVariable>(psCommand, sendErrorToHost : false);

            if (results != null)
            {
                foreach (PSVariable psvariable in results)
                {
                    var variableDetails = new VariableDetails(psvariable)
                    {
                        Id = this.nextVariableId++
                    };
                    this.variables.Add(variableDetails);
                    scopeVariableContainer.Children.Add(variableDetails.Name, variableDetails);

                    if ((autoVariables != null) && AddToAutoVariables(psvariable, scope))
                    {
                        autoVariables.Children.Add(variableDetails.Name, variableDetails);
                    }
                }
            }

            return(scopeVariableContainer);
        }
コード例 #7
0
        /// <summary>
        /// If this variable instance is expandable, this method returns the
        /// details of its children.  Otherwise it returns an empty array.
        /// </summary>
        /// <returns></returns>
        public VariableDetails[] GetChildren()
        {
            VariableDetails[] childVariables = null;

            if (this.IsExpandable)
            {
                if (this.cachedChildren == null)
                {
                    this.cachedChildren = GetChildren(this.valueObject);
                }

                return this.cachedChildren;
            }
            else
            {
                childVariables = new VariableDetails[0];
            }

            return childVariables;
        }
コード例 #8
0
        private async Task FetchVariables()
        {
            this.nextVariableId = VariableDetails.FirstVariableId;
            this.currentVariables = new List<VariableDetails>();

            PSCommand psCommand = new PSCommand();
            psCommand.AddCommand("Get-Variable");
            psCommand.AddParameter("Scope", "Local");

            var results = await this.powerShellContext.ExecuteCommand<PSVariable>(psCommand);

            foreach (var variable in results)
            {
                var details = new VariableDetails(variable);
                details.Id = this.nextVariableId;
                this.currentVariables.Add(details);

                this.nextVariableId++;
            }
        }
コード例 #9
0
        /// <summary>
        /// Gets the list of variables that are children of the scope or variable
        /// that is identified by the given referenced ID.
        /// </summary>
        /// <param name="variableReferenceId"></param>
        /// <returns>An array of VariableDetails instances which describe the requested variables.</returns>
        public VariableDetails[] GetVariables(int variableReferenceId)
        {
            VariableDetails[] childVariables = null;

            if (variableReferenceId >= VariableDetails.FirstVariableId)
            {
                int correctedId =
                    (variableReferenceId - VariableDetails.FirstVariableId);

                VariableDetails parentVariable = 
                    this.currentVariables[correctedId];

                if (parentVariable.IsExpandable)
                {
                    childVariables = parentVariable.GetChildren();

                    foreach (var child in childVariables)
                    {
                        this.currentVariables.Add(child);
                        child.Id = this.nextVariableId;
                        this.nextVariableId++;
                    }
                }
                else
                {
                    childVariables = new VariableDetails[0];
                }
            }
            else
            {
                // TODO: Get variables for the desired scope ID
                childVariables = this.currentVariables.ToArray();
            }

            return childVariables;
        }
コード例 #10
0
        private async Task<VariableContainerDetails> FetchVariableContainer(
            string scope, 
            VariableContainerDetails autoVariables)
        {
            PSCommand psCommand = new PSCommand();
            psCommand.AddCommand("Get-Variable");
            psCommand.AddParameter("Scope", scope);

            var scopeVariableContainer = 
                new VariableContainerDetails(this.nextVariableId++, "Scope: " + scope);
            this.variables.Add(scopeVariableContainer);

            var results = await this.powerShellContext.ExecuteCommand<PSVariable>(psCommand, sendErrorToHost: false);
            if (results != null)
            {
                foreach (PSVariable psvariable in results)
                {
                    var variableDetails = new VariableDetails(psvariable) {Id = this.nextVariableId++};
                    this.variables.Add(variableDetails);
                    scopeVariableContainer.Children.Add(variableDetails.Name, variableDetails);

                    if ((autoVariables != null) && AddToAutoVariables(psvariable, scope))
                    {
                        autoVariables.Children.Add(variableDetails.Name, variableDetails);
                    }
                }
            }

            return scopeVariableContainer;
        }