Browse Source

Fixed bug: 'this' is now passed to property eval as reference

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@884 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
56e727f269
  1. 3
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger-StateControl.cs
  2. 23
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs
  3. 2
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

3
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger-StateControl.cs

@ -175,7 +175,6 @@ namespace Debugger
pausedReason = reason; pausedReason = reason;
sessionID = new object();
OnDebuggingPaused(); OnDebuggingPaused();
// Debugger state is unknown after calling OnDebuggingPaused (it may be resumed) // Debugger state is unknown after calling OnDebuggingPaused (it may be resumed)
@ -225,6 +224,8 @@ namespace Debugger
// Clear current process // Clear current process
currentProcess = null; currentProcess = null;
sessionID = new object();
} }
/// <summary> /// <summary>

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

@ -58,21 +58,26 @@ namespace Debugger
ICorDebugValue[] evalArgs; ICorDebugValue[] evalArgs;
ICorDebugFunction evalCorFunction; ICorDebugFunction evalCorFunction;
baseClassObject.Module.CorModule.GetFunctionFromToken(method.Token, out evalCorFunction); baseClassObject.Module.CorModule.GetFunctionFromToken(method.Token, out evalCorFunction);
// We need to pass reference evalArgs = new ICorDebugValue[] {this.SoftReference};
return new Eval(debugger, evalCorFunction, evalArgs);
}
}
throw new DebuggerException("ToString method not found");
}
}
*/
internal ICorDebugHandleValue SoftReference {
get {
ICorDebugHeapValue2 heapValue = this.CorValue as ICorDebugHeapValue2; ICorDebugHeapValue2 heapValue = this.CorValue as ICorDebugHeapValue2;
if (heapValue == null) { // TODO: Investigate if (heapValue == null) { // TODO: Investigate
return null; return null;
} }
ICorDebugHandleValue corHandle; ICorDebugHandleValue corHandle;
heapValue.CreateHandle(CorDebugHandleType.HANDLE_WEAK_TRACK_RESURRECTION, out corHandle); heapValue.CreateHandle(CorDebugHandleType.HANDLE_WEAK_TRACK_RESURRECTION, out corHandle);
evalArgs = new ICorDebugValue[] {corHandle}; return corHandle;
return new Eval(debugger, evalCorFunction, evalArgs);
} }
} }
throw new DebuggerException("ToString method not found");
}
}
*/
public override string Type { public override string Type {
get{ get{
@ -167,7 +172,7 @@ namespace Debugger
delegate { delegate {
Value updatedVal = getter(); Value updatedVal = getter();
if (updatedVal is UnavailableValue) return null; if (updatedVal is UnavailableValue) return null;
if (this.IsEquivalentValue(updatedVal)) { if (this.IsEquivalentValue(updatedVal) && ((ObjectValue)updatedVal).SoftReference != null) {
return CreatePropertyEval(method, getter); return CreatePropertyEval(method, getter);
} else { } else {
return null; return null;
@ -186,7 +191,7 @@ namespace Debugger
if (method.IsStatic) { if (method.IsStatic) {
return new ICorDebugValue[] {}; return new ICorDebugValue[] {};
} else { } else {
return new ICorDebugValue[] {getter().CorValue}; return new ICorDebugValue[] {((ObjectValue)getter()).SoftReference};
} }
}); });
} }

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

@ -468,7 +468,7 @@ namespace Debugger.Tests
Assert.AreEqual(typeof(UnavailableValue), subVars[3].Value.GetType()); Assert.AreEqual(typeof(UnavailableValue), subVars[3].Value.GetType());
debugger.StartEvaluation(); debugger.StartEvaluation();
WaitForPause(PausedReason.AllEvalsComplete, null); WaitForPause(PausedReason.AllEvalsComplete, null);
Assert.AreEqual(typeof(UnavailableValue), subVars[3].Value); Assert.AreEqual(typeof(UnavailableValue), subVars[3].Value.GetType());
Assert.AreEqual(typeof(UnavailableValue), subVars[4].Value.GetType()); Assert.AreEqual(typeof(UnavailableValue), subVars[4].Value.GetType());
debugger.StartEvaluation(); debugger.StartEvaluation();

Loading…
Cancel
Save