Browse Source

Fixed bug: Base class was not accessible after stepping

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@881 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
dc978575e8
  1. 19
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs
  2. 10
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

19
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs

@ -125,7 +125,7 @@ namespace Debugger
public override IEnumerable<Variable> GetSubVariables(ValueGetter getter) public override IEnumerable<Variable> GetSubVariables(ValueGetter getter)
{ {
if (HasBaseClass) { if (HasBaseClass) {
yield return BaseClassVariable; yield return GetBaseClassVariable(getter);
} }
foreach(Variable var in GetFieldVariables(getter)) { foreach(Variable var in GetFieldVariables(getter)) {
@ -219,13 +219,22 @@ namespace Debugger
} }
} }
public Variable BaseClassVariable { public Variable GetBaseClassVariable(ValueGetter getter)
get { {
if (HasBaseClass) { if (HasBaseClass) {
return new Variable(this.BaseClass, "<Base class>"); return new Variable(debugger,
"<Base class>",
delegate {
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return updatedVal;
if (this.IsEquivalentValue(updatedVal)) {
return ((ObjectValue)updatedVal).BaseClass;
} else { } else {
return null; return new UnavailableValue(debugger, "Object type changed");
} }
});
} else {
return null;
} }
} }

10
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

@ -411,11 +411,6 @@ namespace Debugger.Tests
Assert.AreEqual(true, local.MayHaveSubVariables); Assert.AreEqual(true, local.MayHaveSubVariables);
Assert.AreEqual(typeof(ObjectValue), local.Value.GetType()); Assert.AreEqual(typeof(ObjectValue), local.Value.GetType());
Assert.AreEqual("{Debugger.Tests.TestPrograms.ObjectValue}", local.Value.AsString); 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) { foreach(Variable var in local.SubVariables) {
subVars.Add(var); subVars.Add(var);
} }
@ -425,6 +420,11 @@ namespace Debugger.Tests
Assert.AreEqual(typeof(Variable), subVars[1].GetType()); Assert.AreEqual(typeof(Variable), subVars[1].GetType());
Assert.AreEqual(typeof(Variable), subVars[2].GetType()); Assert.AreEqual(typeof(Variable), subVars[2].GetType());
Assert.AreEqual(typeof(PropertyVariable), subVars[3].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(); debugger.Continue();
WaitForPause(PausedReason.Break, null); WaitForPause(PausedReason.Break, null);

Loading…
Cancel
Save