Esempio n. 1
0
        private Value DoGetValue(LiveStackFrame frame)
        {
            Value result = null;

            // First try locals.
            LocalVariable[] locals = frame.Method.GetLocals();
            LocalVariable local = locals.FirstOrDefault(l => l.Name == m_name);
            if (local != null)
            {
                result = frame.GetValue(local);
            }

            // Then parameters.
            ParameterInfoMirror parm = frame.Method.GetParameters().FirstOrDefault(p => p.Name == m_name);
            if (parm != null)
            {
                result = frame.GetValue(parm);
            }

            // And finally fields and properties.
            if (result == null)
            {
                Value thisPtr = frame.ThisPtr;
                result = EvalMember.Evaluate(frame.Thread, thisPtr, m_name);
            }

            if (result == null)
                throw new Exception("Couldn't find a local, argument, field, or property named " + m_name);

            return result;
        }
Esempio n. 2
0
        public static VariableItem GetChild(ThreadMirror thread, VariableItem parentItem, LiveStackFrame parent, int index)
        {
            VariableItem child;

            IList<LocalVariable> locals = parent.GetVisibleVariables();
            if (index < locals.Count)
            {
                LocalVariable local = locals[index];

                string name = local.Name;
                if (string.IsNullOrEmpty(name))
                    name = "$" + local.Index;			// temporary variable

                Value v = parent.GetValue(local);
                child = new VariableItem(thread, name, parentItem, local, v, index);
            }
            else
            {
                FieldInfoMirror[] fields = parent.Method.DeclaringType.GetAllFields().ToArray();
                Contract.Assert(fields.Length > 0);

                object v = null;
                string name = "this";
                if (parent.ThisPtr is ObjectMirror)
                {
                    v = new InstanceValue((ObjectMirror) parent.ThisPtr, fields);
                }
                else if (parent.ThisPtr is StructMirror)
                {
                    v = new InstanceValue((StructMirror) parent.ThisPtr, fields);
                }
                else if (parent.ThisPtr == null || parent.ThisPtr.IsNull())
                {
                    v = new TypeValue(parent.Method.DeclaringType);
                    name = "statics";
                }
                else
                {
                    Contract.Assert(false, parent.ThisPtr.TypeName() + " is bogus");
                }

                child = new VariableItem(thread, name, parentItem, index, v, index);
            }

            return child;
        }