diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs index 1e0d8a4cb1..ac7f14edcf 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs @@ -125,7 +125,7 @@ namespace Debugger public override IEnumerable GetSubVariables(ValueGetter getter) { if (HasBaseClass) { - yield return BaseClassVariable; + yield return GetBaseClassVariable(getter); } foreach(Variable var in GetFieldVariables(getter)) { @@ -219,13 +219,22 @@ namespace Debugger } } - public Variable BaseClassVariable { - get { - if (HasBaseClass) { - return new Variable(this.BaseClass, ""); - } else { - return null; - } + public Variable GetBaseClassVariable(ValueGetter getter) + { + if (HasBaseClass) { + return new Variable(debugger, + "", + delegate { + Value updatedVal = getter(); + if (updatedVal is UnavailableValue) return updatedVal; + if (this.IsEquivalentValue(updatedVal)) { + return ((ObjectValue)updatedVal).BaseClass; + } else { + return new UnavailableValue(debugger, "Object type changed"); + } + }); + } else { + return null; } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs index 51db8fa15e..cb593cf2c0 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs @@ -411,11 +411,6 @@ namespace Debugger.Tests Assert.AreEqual(true, local.MayHaveSubVariables); Assert.AreEqual(typeof(ObjectValue), local.Value.GetType()); Assert.AreEqual("{Debugger.Tests.TestPrograms.ObjectValue}", local.Value.AsString); - Assert.AreEqual(true, ((ObjectValue)local.Value).HasBaseClass); - baseClass = ((ObjectValue)local.Value).BaseClassVariable; - Assert.AreEqual(typeof(ObjectValue), baseClass.Value.GetType()); - Assert.AreEqual(false, baseClass.Value.IsExpired); - Assert.AreEqual("{Debugger.Tests.TestPrograms.BaseClass}", baseClass.Value.AsString); foreach(Variable var in local.SubVariables) { subVars.Add(var); } @@ -425,6 +420,11 @@ namespace Debugger.Tests Assert.AreEqual(typeof(Variable), subVars[1].GetType()); Assert.AreEqual(typeof(Variable), subVars[2].GetType()); Assert.AreEqual(typeof(PropertyVariable), subVars[3].GetType()); + Assert.AreEqual(true, ((ObjectValue)local.Value).HasBaseClass); + baseClass = subVars[0]; + Assert.AreEqual(typeof(ObjectValue), baseClass.Value.GetType()); + Assert.AreEqual(false, baseClass.Value.IsExpired); + Assert.AreEqual("{Debugger.Tests.TestPrograms.BaseClass}", baseClass.Value.AsString); debugger.Continue(); WaitForPause(PausedReason.Break, null);