////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        public override int SetValueAsString(string value, uint radix, uint timeout)
        {
            //
            // Sets the value of a property from a string.
            //

            LoggingUtils.PrintFunction();

            try
            {
                string command = string.Format("-var-assign \"{0}\" \"{1}\"", m_gdbVariable.Name, value);

                MiResultRecord resultRecord = m_debugger.GdbClient.SendSyncCommand(command);

                MiResultRecord.RequireOk(resultRecord, command);

                if (resultRecord.HasField("value"))
                {
                    m_gdbVariable.Populate(resultRecord.Results);

                    m_debugger.VariableManager.UpdateVariable(m_gdbVariable);

                    return(Constants.S_OK);
                }

                return(Constants.S_FALSE);
            }
            catch (Exception e)
            {
                LoggingUtils.HandleException(e);

                return(Constants.E_FAIL);
            }
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        public void UpdateVariable(MiVariable variable)
        {
            LoggingUtils.PrintFunction();

            string command = string.Format("-var-update --all-values \"{0}\"", variable.Name);

            MiResultRecord resultRecord = m_debugger.GdbClient.SendSyncCommand(command);

            MiResultRecord.RequireOk(resultRecord, command);

            if (resultRecord.HasField("changelist"))
            {
                variable.Populate(resultRecord ["changelist"]);
            }
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        private MiVariable [] GetChildVariables(MiVariable parentVariable, int depth)
        {
            LoggingUtils.PrintFunction();

            List <MiVariable> childVariables = new List <MiVariable> ();

            if ((depth > 0) && (parentVariable.HasChildren))
            {
                string command = string.Format("-var-list-children --all-values \"{0}\"", parentVariable.Name);

                MiResultRecord resultRecord = m_debugger.GdbClient.SendSyncCommand(command);

                MiResultRecord.RequireOk(resultRecord, command);

                if (resultRecord.HasField("children"))
                {
                    List <MiResultValue> childrenList = resultRecord ["children"] [0] ["child"];

                    for (int i = 0; i < childrenList.Count; ++i)
                    {
                        MiResultValueTuple childTuple = childrenList [i] as MiResultValueTuple;

                        string variableName = childTuple ["name"] [0].GetString();

                        MiVariable childVariable = null;

                        bool isPseudoChild = false;

                        if (childTuple.HasField("exp"))
                        {
                            string variableExpression = childTuple ["exp"] [0].GetString();

                            if (!string.IsNullOrEmpty(variableExpression))
                            {
                                childVariable = new MiVariable(variableName, variableExpression);

                                childVariable.Populate(childTuple.Values);

                                isPseudoChild = childVariable.IsPseudoChild;
                            }
                        }

                        if (childVariable == null)
                        {
                            childVariable = new MiVariable(variableName, childTuple.Values);
                        }

                        if (isPseudoChild)
                        {
                            depth += 1; // need an additional level of children.

                            MiVariable [] evaluatedChildren = GetChildVariables(childVariable, depth - 1);

                            foreach (MiVariable child in evaluatedChildren)
                            {
                                childVariable.AddChild(child);
                            }
                        }

                        childVariables.Add(childVariable);
                    }
                }
            }

            return(childVariables.ToArray());
        }