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

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

@ -58,14 +58,7 @@ namespace Debugger @@ -58,14 +58,7 @@ namespace Debugger
ICorDebugValue[] evalArgs;
ICorDebugFunction evalCorFunction;
baseClassObject.Module.CorModule.GetFunctionFromToken(method.Token, out evalCorFunction);
// We need to pass reference
ICorDebugHeapValue2 heapValue = this.CorValue as ICorDebugHeapValue2;
if (heapValue == null) { // TODO: Investigate
return null;
}
ICorDebugHandleValue corHandle;
heapValue.CreateHandle(CorDebugHandleType.HANDLE_WEAK_TRACK_RESURRECTION, out corHandle);
evalArgs = new ICorDebugValue[] {corHandle};
evalArgs = new ICorDebugValue[] {this.SoftReference};
return new Eval(debugger, evalCorFunction, evalArgs);
}
}
@ -74,6 +67,18 @@ namespace Debugger @@ -74,6 +67,18 @@ namespace Debugger
}
*/
internal ICorDebugHandleValue SoftReference {
get {
ICorDebugHeapValue2 heapValue = this.CorValue as ICorDebugHeapValue2;
if (heapValue == null) { // TODO: Investigate
return null;
}
ICorDebugHandleValue corHandle;
heapValue.CreateHandle(CorDebugHandleType.HANDLE_WEAK_TRACK_RESURRECTION, out corHandle);
return corHandle;
}
}
public override string Type {
get{
return classProps.Name;
@ -167,7 +172,7 @@ namespace Debugger @@ -167,7 +172,7 @@ namespace Debugger
delegate {
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return null;
if (this.IsEquivalentValue(updatedVal)) {
if (this.IsEquivalentValue(updatedVal) && ((ObjectValue)updatedVal).SoftReference != null) {
return CreatePropertyEval(method, getter);
} else {
return null;
@ -186,7 +191,7 @@ namespace Debugger @@ -186,7 +191,7 @@ namespace Debugger
if (method.IsStatic) {
return new ICorDebugValue[] {};
} 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 @@ -468,7 +468,7 @@ namespace Debugger.Tests
Assert.AreEqual(typeof(UnavailableValue), subVars[3].Value.GetType());
debugger.StartEvaluation();
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());
debugger.StartEvaluation();

Loading…
Cancel
Save