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); }
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)); }
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); }
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); }
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); }
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)); }
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); }