コード例 #1
0
		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)
			};
		}
コード例 #2
0
		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;
		}
コード例 #3
0
		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;
		}
コード例 #4
0
		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;
		}
コード例 #5
0
		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;
		}