Example #1
0
        public void InnerStructSizeTest()
        {
            // https://github.com/microsoft/clrmd/issues/101
            using DataTarget dt      = TestTargets.Types.LoadFullDump();
            using ClrRuntime runtime = dt.ClrVersions.Single().CreateRuntime();

            ClrModule sharedLibrary   = runtime.GetModule("sharedlibrary.dll");
            ClrType   structTestClass = sharedLibrary.GetTypeByName("StructTestClass");
            ClrType   structTest      = sharedLibrary.GetTypeByName("Struct");

            Assert.NotNull(structTest);

            ClrInstanceField field = structTestClass.GetInstanceFieldByName("s");

            if (dt.CacheOptions.CacheTypes)
            {
                Assert.Same(structTest, field.Type);
            }
            else
            {
                Assert.Equal(structTest, field.Type);
            }

            Assert.Equal(sizeof(int), field.Size);

            ClrInstanceField nes = structTestClass.GetInstanceFieldByName("nes");

            Assert.Equal(0, nes.Size);

            ClrInstanceField es = nes.Type.GetInstanceFieldByName("es");

            Assert.Equal(0, es.Size);
        }
Example #2
0
        public void NoFieldCachingTest()
        {
            using DataTarget dt             = TestTargets.Types.LoadFullDump();
            dt.CacheOptions.CacheFields     = false;
            dt.CacheOptions.CacheFieldNames = StringCaching.None;

            using ClrRuntime runtime = dt.ClrVersions.Single().CreateRuntime();
            ClrModule module = runtime.GetModule("sharedlibrary.dll");
            ClrType   type   = module.GetTypeByName("Foo");

            Assert.NotEqual(0ul, type.MethodTable);  // Sanity test

            Assert.NotEqual(type.Fields, type.Fields);

            ClrField field  = type.GetInstanceFieldByName("o");
            ClrField field2 = type.Fields.Single(f => f.Name == "o");

            Assert.NotSame(field, field2);
            Assert.NotSame(field.Name, field.Name);

            dt.CacheOptions.CacheFieldNames = StringCaching.Intern;

            Assert.Same(field.Name, field.Name);
            Assert.Same(field.Name, string.Intern(field.Name));
        }
Example #3
0
        private static void CheckField(ClrType type, string fieldName, ClrElementType element, string typeName, int size)
        {
            ClrInstanceField field = type.GetInstanceFieldByName(fieldName);

            Assert.NotNull(field);
            Assert.NotNull(field.Type);

            Assert.Equal(element, field.ElementType);
            Assert.Equal(typeName, field.Type.Name);
            Assert.Equal(size, field.Size);
        }
Example #4
0
        public ClrInstanceField TestFieldNameAndValue(ClrType type, ulong obj, string name, string value)
        {
            ClrInstanceField field = type.GetInstanceFieldByName(name);

            Assert.NotNull(field);
            Assert.Equal(name, field.Name);

            string str = field.ReadString(obj, interior: false);

            Assert.Equal(value, str);

            return(field);
        }
Example #5
0
        public ClrInstanceField TestFieldNameAndValue <T>(ClrType type, ulong obj, string name, T value)
            where T : unmanaged
        {
            ClrInstanceField field = type.GetInstanceFieldByName(name);

            Assert.NotNull(field);
            Assert.Equal(name, field.Name);

            T t = field.Read <T>(obj, interior: false);

            Assert.Equal(value, t);

            return(field);
        }
Example #6
0
        protected static ClrInstanceField SearchFieldRecursively(ClrType type, string name)
        {
            var field = type.GetInstanceFieldByName(name);

            if (field is not null)
            {
                return(field);
            }
            if (type.BaseType is null)
            {
                return(null);
            }
            return(SearchFieldRecursively(type.BaseType, name));
        }
Example #7
0
        public void TestInstanceFieldModifiers()
        {
            using DataTarget dt      = TestTargets.NestedTypes.LoadFullDump();
            using ClrRuntime runtime = dt.ClrVersions.Single().CreateRuntime();

            ClrModule module  = runtime.GetModule(TypeTests.NestedTypesModuleName);
            ClrType   program = module.GetTypeByName("Program");

            ClrField publicField = program.GetInstanceFieldByName("publicField");

            Assert.True(publicField.IsPublic);

            ClrField privateField = program.GetInstanceFieldByName("privateField");

            Assert.True(privateField.IsPrivate);

            ClrField internalField = program.GetInstanceFieldByName("internalField");

            Assert.True(internalField.IsInternal);

            ClrField protectedField = program.GetInstanceFieldByName("protectedField");

            Assert.True(protectedField.IsProtected);
        }