private static IFieldData GetFieldData(IClrTypeDecorator type, ulong objRef, ClrInstanceFieldDecorator fieldRef, bool interior, string fieldName) { ulong address = GetAddress(objRef, fieldRef, interior); IClrTypeDecorator fieldType = GetFieldType(type, fieldRef, address); string fieldValue = GetFieldValue(objRef, fieldRef, interior, address, fieldType); return new FieldData { Name = fieldName, ReferenceObject = GetReferenceObjectFactory(fieldType, address, fieldValue, false) }; }
private static string GetFieldValue(ulong objRef, ClrInstanceFieldDecorator fieldRef, bool interior, ulong address, IClrTypeDecorator fieldType) { string fieldValue = string.Empty; if (fieldRef.HasSimpleValue) { fieldValue = GetValueTypeValue(objRef, fieldRef, interior); } if (fieldRef.IsObjectAndNotString && address != Null && fieldType.HasSimpleValue) { fieldValue = GetBoxedValueTypeValue(fieldType, address); } return fieldValue; }
private static IClrTypeDecorator GetFieldType(IClrTypeDecorator type, ClrInstanceFieldDecorator fieldRef, ulong address) { IClrTypeDecorator fieldType = fieldRef.Type; if (address != Null && fieldRef.IsObjectAndNotString) { fieldType = type.Heap.GetObjectType(address); } return fieldType; }
private static string GetValueTypeValue(ulong objRef, ClrInstanceFieldDecorator fieldRef, bool interior) { string fieldValue = string.Empty; object value = fieldRef.GetFieldValue(objRef, interior); if (value != null) { fieldValue = value.ToString(); } return fieldValue; }
private static ulong GetAddress(ulong objRef, ClrInstanceFieldDecorator fieldRef, bool interior) { var address = fieldRef.GetFieldAddress(objRef, interior); if (fieldRef.IsObjectAndNotString) { address = (ulong)fieldRef.GetFieldValue(objRef); } return address; }