Пример #1
0
        internal static int GetSlot(this ISymUnmanagedVariable local)
        {
            int slot;

            local.GetAddressField1(out slot);
            return(slot);
        }
Пример #2
0
        internal static int GetAttributes(this ISymUnmanagedVariable local)
        {
            int result;
            int hr = local.GetAttributes(out result);

            ThrowExceptionForHR(hr);
            return(result);
        }
Пример #3
0
 internal SymbolVariable(ISymUnmanagedVariable unmanagedVariable)
 {
     if (unmanagedVariable == null)
     {
         throw new ArgumentNullException("unmanagedVariable");
     }
     this.unmanagedVariable = unmanagedVariable;
 }
Пример #4
0
 internal SymbolVariable(ISymUnmanagedVariable unmanagedVariable)
 {
     if (unmanagedVariable == null)
     {
         throw new ArgumentNullException("unmanagedVariable");
     }
     this.unmanagedVariable = unmanagedVariable;
 }
        internal SymVariable(ISymUnmanagedVariable variable)
        {
            // We should not wrap null instances
            if (variable == null)
                throw new ArgumentNullException("variable");

            m_unmanagedVariable = variable;
        }
Пример #6
0
        internal static int GetSlot(this ISymUnmanagedVariable local)
        {
            int result;
            int hr = local.GetAddressField1(out result);

            ThrowExceptionForHR(hr);
            return(result);
        }
Пример #7
0
        internal static void VerifyLocalVariables(ISymUnmanagedEncUpdate symEncUpdate, int methodToken, params string[] expected)
        {
            Assert.Equal(HResult.S_OK, symEncUpdate.GetLocalVariableCount(methodToken, out int count));
            var vars = new ISymUnmanagedVariable[count];

            Assert.Equal(HResult.S_OK, symEncUpdate.GetLocalVariables(methodToken, count, vars, out count));

            AssertEx.Equal(expected, vars.Select(v => v.GetName()));
        }
Пример #8
0
        public SymbolVariable(ISymUnmanagedVariable unmanaged)
        {
            if (unmanaged == null)
            {
                throw new ArgumentNullException("unmanaged");
            }

            _unmanaged = unmanaged;
        }
        public static ISymUnmanagedVariable[] GetLocals(this ISymUnmanagedScope symScope)
        {
            uint count;

            symScope.GetLocals(0, out count, new ISymUnmanagedVariable[0]);
            ISymUnmanagedVariable[] locals = new ISymUnmanagedVariable[count];
            symScope.GetLocals(count, out count, locals);
            return(locals);
        }
Пример #10
0
        internal static byte[] ToLocalSignature(this ISymUnmanagedVariable variable)
        {
            int n;

            variable.GetSignature(0, out n, null);
            var bytes = new byte[n];

            variable.GetSignature(n, out n, bytes);
            return(bytes);
        }
Пример #11
0
		public ISymbolVariable[] GetGlobalVariables() {
			uint numVars;
			reader.GetGlobalVariables(0, out numVars, null);
			var unVars = new ISymUnmanagedVariable[numVars];
			reader.GetGlobalVariables((uint)unVars.Length, out numVars, unVars);
			var vars = new ISymbolVariable[numVars];
			for (uint i = 0; i < numVars; i++)
				vars[i] = new SymbolVariable(unVars[i]);
			return vars;
		}
Пример #12
0
 LocalVariable GetLocalVariable(ISymUnmanagedVariable symVar)
 {
     return(new LocalVariable(
                symVar.Name,
                process,
                new IExpirable[] { this },
                new IMutable[] { process.DebugeeState },
                delegate { return GetCorValueOfLocalVariable(symVar); }
                ));
 }
Пример #13
0
        public static string GetName(this ISymUnmanagedVariable local)
        {
            if (local == null)
            {
                throw new ArgumentNullException(nameof(local));
            }

            return(BufferToString(GetItems(local,
                                           (ISymUnmanagedVariable a, int b, out int c, char[] d) => a.GetName(b, out c, d))));
        }
Пример #14
0
		public ISymbolVariable[] GetParameters() {
			uint numVars;
			method.GetParameters(0, out numVars, null);
			var unVars = new ISymUnmanagedVariable[numVars];
			method.GetParameters((uint)unVars.Length, out numVars, unVars);
			var vars = new ISymbolVariable[numVars];
			for (uint i = 0; i < numVars; i++)
				vars[i] = new SymbolVariable(unVars[i]);
			return vars;
		}
Пример #15
0
        internal SymVariable(ISymUnmanagedVariable variable)
        {
            // We should not wrap null instances
            if (variable == null)
            {
                throw new ArgumentNullException("variable");
            }

            m_unmanagedVariable = variable;
        }
Пример #16
0
        private List <DebugLocalVariableInfo> GetLocalVariablesInScope(ISymUnmanagedScope symScope)
        {
            List <DebugLocalVariableInfo> vars = new List <DebugLocalVariableInfo>();

            foreach (ISymUnmanagedVariable symVar in symScope.GetLocals())
            {
                ISymUnmanagedVariable symVarCopy = symVar;
                int                       start;
                SignatureReader           sigReader  = new SignatureReader(symVar.GetSignature());
                LocalVarSig.LocalVariable locVarSig  = sigReader.ReadLocalVariable(sigReader.Blob, 0, out start);
                DebugType                 locVarType = DebugType.CreateFromSignature(this.DebugModule, locVarSig.Type, declaringType);
                // Compiler generated?
                // NB: Display class does not have the compiler-generated flag
                if ((symVar.GetAttributes() & 1) == 1 || symVar.GetName().StartsWith("CS$"))
                {
                    // Get display class from local variable
                    if (locVarType.IsDisplayClass)
                    {
                        AddCapturedLocalVariables(
                            vars,
                            (int)symScope.GetStartOffset(),
                            (int)symScope.GetEndOffset(),
                            delegate(StackFrame context)
                        {
                            return(GetLocalVariableValue(context, symVarCopy));
                        },
                            locVarType
                            );
                    }
                }
                else
                {
                    DebugLocalVariableInfo locVar = new DebugLocalVariableInfo(
                        symVar.GetName(),
                        (int)symVar.GetAddressField1(),
                        // symVar also has Get*Offset methods, but the are not implemented
                        (int)symScope.GetStartOffset(),
                        (int)symScope.GetEndOffset(),
                        locVarType,
                        delegate(StackFrame context)
                    {
                        return(GetLocalVariableValue(context, symVarCopy));
                    }
                        );
                    vars.Add(locVar);
                }
            }
            foreach (ISymUnmanagedScope childScope in symScope.GetChildren())
            {
                vars.AddRange(GetLocalVariablesInScope(childScope));
            }

            return(vars);
        }
Пример #17
0
 public ISymbolVariable[] GetGlobalVariables()
 {
     uint numVars;
     reader.GetGlobalVariables(0, out numVars, null);
     var unVars = new ISymUnmanagedVariable[numVars];
     reader.GetGlobalVariables((uint)unVars.Length, out numVars, unVars);
     var vars = new ISymbolVariable[numVars];
     for (uint i = 0; i < numVars; i++)
         vars[i] = new SymbolVariable(unVars[i]);
     return vars;
 }
Пример #18
0
 public ISymbolVariable[] GetVariables(SymbolToken parent)
 {
     uint numVars;
     reader.GetVariables((uint)parent.GetToken(), 0, out numVars, null);
     var unVars = new ISymUnmanagedVariable[numVars];
     reader.GetVariables((uint)parent.GetToken(), (uint)unVars.Length, out numVars, unVars);
     var vars = new ISymbolVariable[numVars];
     for (uint i = 0; i < numVars; i++)
         vars[i] = new SymbolVariable(unVars[i]);
     return vars;
 }
Пример #19
0
        public static int GetAttributes(this ISymUnmanagedVariable local)
        {
            if (local == null)
            {
                throw new ArgumentNullException(nameof(local));
            }

            int result;

            ThrowExceptionForHR(local.GetAttributes(out result));
            return(result);
        }
Пример #20
0
 ICorDebugValue GetLocalVariableCorValue(ISymUnmanagedVariable symVar)
 {
     try {
         return(CorILFrame.GetLocalVariable((uint)symVar.AddressField1));
     } catch (COMException e) {
         if ((uint)e.ErrorCode == 0x80131304)
         {
             throw new GetValueException("Unavailable in optimized code");
         }
         throw;
     }
 }
Пример #21
0
        public ISymbolVariable[] GetVariables(SymbolToken parent)
        {
            int varNm;

            private_reader.GetVariables(parent, 0, out varNm, null);
            ISymUnmanagedVariable[] unVars = new ISymUnmanagedVariable[varNm];
            SymbolVariable[]        retVal = new SymbolVariable[varNm];
            private_reader.GetVariables(parent, varNm, out varNm, unVars);
            for (int i = 0; i < varNm; i++)
            {
                retVal[i] = new SymbolVariable(unVars[i]);
            }
            return(retVal);
        }
        public static unsafe byte[] GetSignature(this ISymUnmanagedVariable symVar)
        {
            byte[] sig = new byte[defaultSigSize];
            uint   acualSize;

            fixed(byte *pSig = sig)
            symVar.GetSignature((uint)sig.Length, out acualSize, new IntPtr(pSig));

            Array.Resize(ref sig, (int)acualSize);
            if (acualSize > defaultSigSize)
                fixed(byte *pSig = sig)
                symVar.GetSignature((uint)sig.Length, out acualSize, new IntPtr(pSig));
            return(sig);
        }
Пример #23
0
        public static ISymUnmanagedVariable[] GetAndValidateVariables(ISymUnmanagedScope scope, int expectedCount)
        {
            int count, count2, count3;

            Assert.Equal(HResult.S_OK, scope.GetLocalCount(out count));
            Assert.Equal(expectedCount, count);
            Assert.Equal(HResult.S_OK, scope.GetLocals(0, out count2, null));
            Assert.Equal(expectedCount, count2);
            var variables = new ISymUnmanagedVariable[count];

            Assert.Equal(HResult.S_OK, scope.GetLocals(count, out count3, variables));
            Assert.Equal(count, count3);
            return(variables);
        }
        public LocalVariableIdentifierExpression(MethodInfo method, ISymUnmanagedVariable symVar)
        {
            if (method == null)
            {
                throw new ArgumentNullException("method");
            }
            if (symVar == null)
            {
                throw new ArgumentNullException("symVar");
            }

            this.method = method;
            this.symVar = symVar;
            this.name   = symVar.Name;
        }
Пример #25
0
        public ISymbolVariable[] GetVariables()
        {
            int cVars = 0;
            uint i;
            m_unmanagedNamespace.GetVariables(0, out cVars, null);
            var unmanagedVariables = new ISymUnmanagedVariable[cVars];
            m_unmanagedNamespace.GetVariables(cVars, out cVars, unmanagedVariables);

            var Variables = new ISymbolVariable[cVars];
            for (i = 0; i < cVars; i++)
            {
                Variables[i] = new SymVariable(unmanagedVariables[i]);
            }
            return Variables;
        }
        static Value GetLocalVariableValue(StackFrame context, ISymUnmanagedVariable symVar)
        {
            ICorDebugValue corVal;

            try {
                corVal = context.CorILFrame.GetLocalVariable((uint)symVar.GetAddressField1());
            } catch (COMException e) {
                if ((uint)e.ErrorCode == 0x80131304)
                {
                    throw new GetValueException("Unavailable in optimized code");
                }
                throw;
            }
            return(new Value(context.AppDomain, corVal));
        }
Пример #27
0
        /// <summary>
        /// Gets the local variables within the current lexical scope
        /// </summary>
        /// <returns>The local variables of the current scope</returns>
        public ISymbolVariable[] GetLocals()
        {
            int lcNum;

            private_scope.GetLocals(0, out lcNum, null);
            ISymUnmanagedVariable[] unVars  = new ISymUnmanagedVariable[lcNum];
            ISymbolVariable[]       manVars = new ISymbolVariable[lcNum];

            private_scope.GetLocals(lcNum, out lcNum, unVars);
            for (int i = 0; i < lcNum; i++)
            {
                manVars[i] = new SymbolVariable(unVars[i]);
            }
            return(manVars);
        }
Пример #28
0
        public ISymbolVariable[] GetLocals()
        {
            m_target.GetLocals(0, out var count, null);
            ISymUnmanagedVariable[] uVariables = new ISymUnmanagedVariable[count];
            m_target.GetLocals(count, out count, uVariables);

            int i;

            ISymbolVariable[] variables = new ISymbolVariable[count];
            for (i = 0; i < count; i++)
            {
                variables[i] = new SymVariable(uVariables[i]);
            }
            return(variables);
        }
Пример #29
0
        public ISymbolVariable[] GetParameters()
        {
            uint numVars;

            method.GetParameters(0, out numVars, null);
            var unVars = new ISymUnmanagedVariable[numVars];

            method.GetParameters((uint)unVars.Length, out numVars, unVars);
            var vars = new ISymbolVariable[numVars];

            for (uint i = 0; i < numVars; i++)
            {
                vars[i] = new SymbolVariable(unVars[i]);
            }
            return(vars);
        }
Пример #30
0
        public ISymbolVariable[] GetVariables()
        {
            int  cVars = 0;
            uint i;

            m_unmanagedNamespace.GetVariables(0, out cVars, null);
            ISymUnmanagedVariable[] unmanagedVariables = new ISymUnmanagedVariable[cVars];
            m_unmanagedNamespace.GetVariables(cVars, out cVars, unmanagedVariables);

            ISymbolVariable[] Variables = new ISymbolVariable[cVars];
            for (i = 0; i < cVars; i++)
            {
                Variables[i] = new SymVariable(unmanagedVariables[i]);
            }
            return(Variables);
        }
Пример #31
0
        public ISymbolVariable[] GetVariables(SymbolToken parent)
        {
            int  cVars = 0;
            uint i;

            m_reader.GetVariables(parent, 0, out cVars, null);
            ISymUnmanagedVariable[] unmanagedVariables = new ISymUnmanagedVariable[cVars];
            m_reader.GetVariables(parent, cVars, out cVars, unmanagedVariables);
            SymVariable[] variables = new SymVariable[cVars];

            for (i = 0; i < cVars; i++)
            {
                variables[i] = new SymVariable(unmanagedVariables[i]);
            }
            return(variables);
        }
Пример #32
0
        public ISymbolVariable[] GetGlobalVariables()
        {
            int  cVars = 0;
            uint i;

            m_reader.GetGlobalVariables(0, out cVars, null);
            ISymUnmanagedVariable[] unmanagedVariables = new ISymUnmanagedVariable[cVars];
            m_reader.GetGlobalVariables(cVars, out cVars, unmanagedVariables);
            SymVariable[] variables = new SymVariable[cVars];

            for (i = 0; i < cVars; i++)
            {
                variables[i] = new SymVariable(unmanagedVariables[i]);
            }
            return(variables);
        }
Пример #33
0
        public ISymbolVariable[] GetParameters()
        {
            int  cVariables;
            uint i;

            unmanagedMethod.GetParameters(0, out cVariables, null);
            ISymUnmanagedVariable[] unmanagedVariables = new ISymUnmanagedVariable[cVariables];
            unmanagedMethod.GetParameters(cVariables, out cVariables, unmanagedVariables);

            ISymbolVariable[] variables = new ISymbolVariable[cVariables];
            for (i = 0; i < cVariables; i++)
            {
                variables[i] = new SymbolVariable(unmanagedVariables[i]);
            }
            return(variables);
        }
Пример #34
0
        ICorDebugValue GetCorValueOfLocalVariable(ISymUnmanagedVariable symVar)
        {
            if (this.HasExpired)
            {
                throw new CannotGetValueException("FUNCTION_HAS_EXPIRED");
            }

            try {
                return(CorILFrame.GetLocalVariable((uint)symVar.AddressField1));
            } catch (COMException e) {
                if ((uint)e.ErrorCode == 0x80131304)
                {
                    throw new CannotGetValueException("Unavailable in optimized code");
                }
                throw;
            }
        }
Пример #35
0
        public ISymbolVariable[] GetLocalVariables(SymbolToken mdMethodToken)
        {
            int count = 0;

            ((ISymUnmanagedEncUpdate)m_reader).GetLocalVariables(mdMethodToken, 0, null, out count);
            ISymUnmanagedVariable[] unmanagedVariables = new ISymUnmanagedVariable[count];
            ((ISymUnmanagedEncUpdate)m_reader).GetLocalVariables(mdMethodToken, count, unmanagedVariables, out count);

            ISymbolVariable[] variables = new ISymbolVariable[count];
            uint i;

            for (i = 0; i < count; i++)
            {
                variables[i] = new SymVariable(unmanagedVariables[i]);
            }
            return(variables);
        }
Пример #36
0
        internal override int GetLocals(int bufferLength, out int count, ISymUnmanagedVariable[] locals)
        {
            var mdReader = SymMethod.MetadataReader;
            var scope = mdReader.GetLocalScope(_handle);

            var handles = scope.GetLocalVariables();

            int i = 0;
            foreach (var handle in handles)
            {
                if (i >= bufferLength)
                {
                    break;
                }

                locals[i++] = new SymVariable(SymMethod, handle);
            }

            count = (bufferLength == 0) ? handles.Count : i;
            return HResult.S_OK;
        }
Пример #37
0
 public static ISymUnmanagedVariable[] GetAndValidateVariables(ISymUnmanagedScope scope, int expectedCount)
 {
     int count, count2, count3;
     Assert.Equal(HResult.S_OK, scope.GetLocalCount(out count));
     Assert.Equal(expectedCount, count);
     Assert.Equal(HResult.S_OK, scope.GetLocals(0, out count2, null));
     Assert.Equal(expectedCount, count2);
     var variables = new ISymUnmanagedVariable[count];
     Assert.Equal(HResult.S_OK, scope.GetLocals(count, out count3, variables));
     Assert.Equal(count, count3);
     return variables;
 }
Пример #38
0
		public static ISymUnmanagedVariable[] GetLocals(this ISymUnmanagedScope symScope)
		{
			uint count;
			symScope.GetLocals(0, out count, new ISymUnmanagedVariable[0]);
			ISymUnmanagedVariable[] locals = new ISymUnmanagedVariable[count];
			symScope.GetLocals(count, out count, locals);
			return locals;
		}
Пример #39
0
 static Value GetLocalVariableValue(StackFrame context, ISymUnmanagedVariable symVar)
 {
     ICorDebugValue corVal;
     try {
         corVal = context.CorILFrame.GetLocalVariable((uint)symVar.GetAddressField1());
     } catch (COMException e) {
         if ((uint)e.ErrorCode == 0x80131304) throw new GetValueException("Unavailable in optimized code");
         throw;
     }
     return new Value(context.AppDomain, corVal);
 }
Пример #40
0
 internal SymVariable(ISymUnmanagedVariable variable)
 {
     m_unmanagedVariable = variable;
 }
Пример #41
0
        /// <summary>
        /// Emits scope debugging symbols based on <c>ISymUnmanagedScope</c> insatnce, representing
        /// scope from new assembly.
        /// </summary>
        /// <param name="smScope">Scope from new version of changed assembly.</param>
        /// <param name="placeholder">Placeholder translation for local variables.</param>
        public void EmitScope(ISymUnmanagedScope smScope, Dictionary<int, int> placeholder)
        {
            if(State != WriterState.Building){
                throw new TranslatingException("ISym* interfaces were not initialized.");
            }
            uint scStartOffset = smScope.__GetStartOffset();
            uint scEndOffset = smScope.__GetEndOffset();
            mWriter.OpenScope(scStartOffset);

            uint localsCount = smScope.__GetLocalCount();
            if(localsCount > 0){
                uint read;
                ISymUnmanagedVariable[] variables = new ISymUnmanagedVariable[localsCount];
                smScope.__GetLocals(localsCount,out read,variables);
                for (int i = 0; i < localsCount; i++) {
                    byte[] signature = variables[i].GetSignature();
                    Signature sig = new Signature(signature);
                    sig.Migrate(translator);
                    signature = sig.Compress();

                    string name = variables[i].GetName();
                    uint addr1 = 0;//variables[i].GetAddressField1();
                    uint addr2 = 0;//variables[i].GetAddressField2();
                    uint addr3 = 0;//variables[i].GetAddressField3();
                    uint addrKind = variables[i].GetAddressKind();//variables[i].GetAddressKind();
                    if((variables[i].GetAttributes() & 1) != 1)
                    {
                        addr1 = variables[i].GetAddressField1();
                        addrKind = variables[i].GetAddressKind();
                        if (placeholder != null && placeholder.ContainsKey((int)addr1))
                        {
                            addr1 = (uint)placeholder[(int)addr1];
                        }
                    }
                    uint varStartOffset = scStartOffset;
                    uint varEndOffset = scEndOffset;
                    uint attributes = variables[i].GetAttributes();

                    IntPtr pName = Marshal.StringToCoTaskMemUni(name);
                    IntPtr pSig = Marshal.AllocCoTaskMem(signature.Length);
                    Marshal.Copy(signature,0,pSig,signature.Length);

                    try{
                        mWriter.DefineLocalVariable(pName,attributes,(uint)signature.Length,pSig,addrKind,
                                                    addr1,addr2,addr3,varStartOffset,varEndOffset);
                    } finally {
                        Marshal.FreeCoTaskMem(pSig);
                        Marshal.FreeCoTaskMem(pName);
                    }
                }
            }
            ISymUnmanagedScope[] subScopes = smScope.GetChildren();
            foreach(ISymUnmanagedScope subScope in subScopes){
                EmitScope(subScope,placeholder);
            }
            mWriter.CloseScope(scEndOffset);
        }
Пример #42
0
        public ISymbolVariable[] GetLocalVariables(SymbolToken mdMethodToken)
        {
            int count = 0;
            ((ISymUnmanagedEncUpdate)m_reader).GetLocalVariables(mdMethodToken, 0, null, out count);
            ISymUnmanagedVariable[] unmanagedVariables = new ISymUnmanagedVariable[count];
            ((ISymUnmanagedEncUpdate)m_reader).GetLocalVariables(mdMethodToken, count, unmanagedVariables, out count);

            ISymbolVariable[] variables = new ISymbolVariable[count];
            uint i;
            for (i = 0; i < count; i++)
            {
                variables[i] = new SymVariable(unmanagedVariables[i]);
            }
            return variables;
        }
Пример #43
0
 public int GetGlobalVariables(int cVars, out int pcVars, ISymUnmanagedVariable[] vars)
 {
     throw new NotImplementedException();
 }
Пример #44
0
		public SymbolVariable(ISymUnmanagedVariable variable) {
			this.variable = variable;
		}
 internal LocalVariable(ISymUnmanagedVariable symVariable)
 {
     SymVariable = symVariable;
 }
Пример #46
0
        public ISymbolVariable[] GetGlobalVariables()
        {
            int cVars = 0;
            uint i;
            m_reader.GetGlobalVariables(0, out cVars, null);
            ISymUnmanagedVariable[] unmanagedVariables = new ISymUnmanagedVariable[cVars];
            m_reader.GetGlobalVariables(cVars, out cVars, unmanagedVariables);
            SymVariable[] variables = new SymVariable[cVars];

            for (i = 0; i < cVars; i++)
            {
                variables[i] = new SymVariable(unmanagedVariables[i]);
            }
            return variables;
        }
		public static void GetLocals(this ISymUnmanagedScope instance, uint cLocals, out uint pcLocals, ISymUnmanagedVariable[] locals)
		{
			instance.__GetLocals(cLocals, out pcLocals, locals);
			ProcessOutParameter(locals);
		}
        public ISymbolVariable[] GetParameters()
        {
            int cVariables = 0;
            uint i;
            m_unmanagedMethod.GetParameters(0, out cVariables, null);
            var unmanagedVariables = new ISymUnmanagedVariable[cVariables];
            m_unmanagedMethod.GetParameters(cVariables, out cVariables, unmanagedVariables);

            var Variables = new ISymbolVariable[cVariables];
            for (i = 0; i < cVariables; i++)
            {
                Variables[i] = new SymVariable(unmanagedVariables[i]);
            }

            return Variables;
        }
Пример #49
0
            static ICorDebugValue _FindLocal(string name, ICorDebugILFrame ilframe, ISymUnmanagedScope unmScope, uint ip)
            {
                int varcount;
                unmScope.GetLocalCount(out varcount);
                ISymUnmanagedVariable[] vars = new ISymUnmanagedVariable[varcount];
                unmScope.GetLocals(varcount, out varcount, vars);

                for (int iv = 0; iv < varcount; iv++)
                {
                    ISymUnmanagedVariable var = vars[iv];
                    string varname;
                    {
                        int namelen;
                        var.GetName(0, out namelen, null);
                        StringBuilder sbName = new StringBuilder(namelen);
                        var.GetName(sbName.Capacity, out namelen, sbName);
                        namelen--; // Remove nul.
                        sbName.Length = namelen;
                        varname = sbName.ToString();
                    }
                    if (name == varname)
                    {
                        int field1;
                        var.GetAddressField1(out field1);
                        ICorDebugValue pvalue;
                        ilframe.GetLocalVariable((uint)field1, out pvalue);
                        return pvalue;
                    }
                }

                int cChildren;
                unmScope.GetChildren(0, out cChildren, null);
                ISymUnmanagedScope[] children = new ISymUnmanagedScope[cChildren];
                unmScope.GetChildren(children.Length, out cChildren, children);
                for (int ic = 0; ic < cChildren; ic++)
                {
                    ICorDebugValue pvalue = _FindLocal(name, ilframe, children[ic], ip);
                    if (null != pvalue)
                    {
                        return pvalue;
                    }
                }

                return null;
            }
Пример #50
0
 internal override int GetLocals(int bufferLength, out int count, ISymUnmanagedVariable[] locals)
 {
     // C# and VB never define any locals in the root scope 
     count = 0;
     return HResult.S_OK;
 }
Пример #51
0
 public int GetParameters(int cParams, out int pcParams, ISymUnmanagedVariable[] parms)
 {
     throw new NotImplementedException();
 }
Пример #52
0
 public int GetLocals(int cLocals, out int pcLocals, ISymUnmanagedVariable[] locals)
 {
     return _scope.GetLocals(cLocals, out pcLocals, locals);
 }
Пример #53
0
 internal SymbolVariable(ISymUnmanagedVariable unVar)
 {
     private_variable = unVar;
 }
Пример #54
0
        public ISymbolVariable[] GetLocals()
        {
            int count;
            m_target.GetLocals(0, out count, null);
            ISymUnmanagedVariable[] uVariables = new ISymUnmanagedVariable[count];
            m_target.GetLocals(count, out count, uVariables);

            int i;
            ISymbolVariable[] variables = new ISymbolVariable[count];
            for (i = 0; i < count; i++)
            {
                variables[i] = new SymVariable(uVariables[i]);
            }
            return variables;
        }
Пример #55
0
		public ISymbolVariable[] GetVariables(SymbolToken parent) {
			uint numVars;
			reader.GetVariables((uint)parent.GetToken(), 0, out numVars, null);
			var unVars = new ISymUnmanagedVariable[numVars];
			reader.GetVariables((uint)parent.GetToken(), (uint)unVars.Length, out numVars, unVars);
			var vars = new ISymbolVariable[numVars];
			for (uint i = 0; i < numVars; i++)
				vars[i] = new SymbolVariable(unVars[i]);
			return vars;
		}
Пример #56
0
        public ISymbolVariable[] GetVariables(SymbolToken parent)
        {
            int cVars = 0;
            uint i;
            m_reader.GetVariables(parent, 0, out cVars, null);
            ISymUnmanagedVariable[] unmanagedVariables = new ISymUnmanagedVariable[cVars];
            m_reader.GetVariables(parent, cVars, out cVars, unmanagedVariables);
            SymVariable[] variables = new SymVariable[cVars];

            for (i = 0; i < cVars; i++)
            {
                variables[i] = new SymVariable(unmanagedVariables[i]);
            }
            return variables;
        }
Пример #57
0
            static void _PrintLocals(ICorDebugILFrame ilframe, ISymUnmanagedScope unmScope, uint ip, System.IO.TextWriter writer)
            {
                int varcount;
                unmScope.GetLocalCount(out varcount);
                ISymUnmanagedVariable[] vars = new ISymUnmanagedVariable[varcount];
                unmScope.GetLocals(varcount, out varcount, vars);

                for (int iv = 0; iv < varcount; iv++)
                {
                    ISymUnmanagedVariable var = vars[iv];
                    string varname;
                    {
                        int namelen;
                        var.GetName(0, out namelen, null);
                        StringBuilder sbName = new StringBuilder(namelen);
                        var.GetName(sbName.Capacity, out namelen, sbName);
                        namelen--; // Remove nul.
                        sbName.Length = namelen;
                        varname = sbName.ToString();
                    }
                    string valstr;
                    {
                        int field1;
                        var.GetAddressField1(out field1);
                        ICorDebugValue pvalue;
                        ilframe.GetLocalVariable((uint)field1, out pvalue);
                        valstr = ToString(pvalue);
                    }
                    writer.WriteLine("{0}={1}", varname, valstr);
                }

                int cChildren;
                unmScope.GetChildren(0, out cChildren, null);
                ISymUnmanagedScope[] children = new ISymUnmanagedScope[cChildren];
                unmScope.GetChildren(children.Length, out cChildren, children);
                for (int ic = 0; ic < cChildren; ic++)
                {
                    _PrintLocals(ilframe, children[ic], ip, writer);
                }

            }
Пример #58
0
        public static void ValidateVariable(ISymUnmanagedVariable variable, string name, int slot, LocalVariableAttributes attributes, byte[] signature)
        {
            int length, length2;

            // name:
            Assert.Equal(HResult.S_OK, variable.GetName(0, out length, null));
            Assert.Equal(name.Length + 1, length);
            var actualName = new char[length];
            Assert.Equal(HResult.S_OK, variable.GetName(length, out length2, actualName));
            Assert.Equal(length, length2);
            Assert.Equal(name + "\0", new string(actualName));

            int value;
            Assert.Equal(HResult.S_OK, variable.GetAddressField1(out value));
            Assert.Equal(slot, value);

            Assert.Equal(HResult.E_NOTIMPL, variable.GetAddressField2(out value));
            Assert.Equal(HResult.E_NOTIMPL, variable.GetAddressField3(out value));
            Assert.Equal(HResult.E_NOTIMPL, variable.GetStartOffset(out value));
            Assert.Equal(HResult.E_NOTIMPL, variable.GetEndOffset(out value));

            Assert.Equal(HResult.S_OK, variable.GetAttributes(out value));
            Assert.Equal(attributes, (LocalVariableAttributes)value);

            Assert.Equal(HResult.S_OK, variable.GetAddressKind(out value));
            Assert.Equal(1, value);

            Assert.Equal(HResult.S_OK, variable.GetSignature(0, out length, null));
            var actualSignature = new byte[length];
            Assert.Equal(HResult.S_OK, variable.GetSignature(length, out length2, actualSignature));
            Assert.Equal(length, length2);
            AssertEx.Equal(signature, actualSignature);
        }
Пример #59
0
        //
        // Gather the local details in a scope and then recurse to child scopes
        //
        private void ProbeScopeForLocals(List<ILLocalVariable> variables, ISymUnmanagedScope scope)
        {
            int localCount;
            ThrowExceptionForHR(scope.GetLocalCount(out localCount));

            ISymUnmanagedVariable[] locals = new ISymUnmanagedVariable[localCount];
            ThrowExceptionForHR(scope.GetLocals(localCount, out localCount, locals));

            for (int i = 0; i < localCount; i++)
            {
                var local = locals[i];

                int slot;
                ThrowExceptionForHR(local.GetAddressField1(out slot));

                int nameLength;
                ThrowExceptionForHR(local.GetName(0, out nameLength, null));

                // nameLength includes terminating '\0'
                char[] nameBuffer = new char[nameLength];
                ThrowExceptionForHR(local.GetName(nameLength, out nameLength, nameBuffer));

                int attributes;
                ThrowExceptionForHR(local.GetAttributes(out attributes));

                variables.Add(new ILLocalVariable() { Slot = slot, Name = new String(nameBuffer, 0, nameLength - 1), CompilerGenerated = (attributes & 0x1) != 0 });
            }

            int childrenCount;
            ThrowExceptionForHR(scope.GetChildren(0, out childrenCount, null));

            ISymUnmanagedScope[] children = new ISymUnmanagedScope[childrenCount];
            ThrowExceptionForHR(scope.GetChildren(childrenCount, out childrenCount, children));

            for (int i = 0; i < childrenCount; i++)
            {
                ProbeScopeForLocals(variables, children[i]);
            }
        }
Пример #60
0
 public int GetVariables(SymbolToken parent, int cVars, out int pcVars, ISymUnmanagedVariable[] vars)
 {
     throw new NotImplementedException();
 }