private void Unbox(ref CorValue value) { CorBoxValue boxVal = value.CastToBoxValue(); if (boxVal != null) value = boxVal.GetObject(); }
private void Initialize(string name, CorValue value) { m_name = name; m_corValue = value; }
/// <summary> /// Creates a new instance of the MDbgValue Object. /// This constructor is public so that applications can use this class to print values (CorValue). /// CorValue's can be returned for example by funceval(CorEval.Result). /// </summary> /// <param name="process">The Process that will own the Value.</param> /// <param name="name">The name of the variable.</param> /// <param name="value">The CorValue that this MDbgValue will start with.</param> public MDbgValue( string name, CorValue value) { Initialize( name, value); }
/// <summary> /// Recursively dereference the input value until we finally find a non-dereferenceable /// value. Along the way, optionally build up a "ptr string" that shows the addresses /// we dereference, separated by "->". /// </summary> /// <param name="value">Value to dereference</param> /// <param name="ptrStringBuilder">StringBuilder if caller wants us to generate /// a "ptr string" (in which case we'll stick it there). If caller doesn't want /// a ptr string, this can be null</param> /// <returns>CorValue we arrive at after dereferencing as many times as we can</returns> private CorValue Dereference(CorValue value, StringBuilder ptrStringBuilder) { while (true) { CorReferenceValue rv = value.CastToReferenceValue(); if (rv == null) break; // not a reference if (ptrStringBuilder != null) { if (ptrStringBuilder.Length > 0) { ptrStringBuilder.Append("->"); } ptrStringBuilder.Append("0x" + rv.Value.ToString("X", System.Globalization.CultureInfo.CurrentUICulture)); } // Bail as soon as we hit a reference to NULL if (rv.IsNull) return null; // reference to null CorValue newValue = null; try { newValue = rv.Dereference(); } catch (COMException ce) { // Check for any errors that are expected if (ce.ErrorCode != (int)HResult.CORDBG_E_VALUE_POINTS_TO_FUNCTION) { throw; // some other error } } if (newValue == null) break; // couldn't dereference the reference (eg. void*) value = newValue; } return value; }
/// <summary> /// Creates a new instance of the MDbgValue Object. /// This constructor is public so that applications can use this class to print values (CorValue). /// CorValue's can be returned for example by funceval(CorEval.Result). /// </summary> /// <param name="value">The CorValue that this MDbgValue will start with.</param> public MDbgValue( CorValue value) { // value can be null, but we should always know what process we are // looking at. Initialize( null, value); }