Browse Source

Some validity checking in debugger. Removed MagicValue and UnknownValue.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@823 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
47c6c73c29
  1. 4
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj
  2. 25
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger-StateControl.cs
  3. 38
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/MagicValue.cs
  4. 25
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PropertyVariable.cs
  5. 40
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/UnknownValue.cs
  6. 12
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Value.cs
  7. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ValueFactory.cs
  8. 17
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Variable.cs

4
src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj

@ -193,14 +193,12 @@
<Compile Include="Src\Variables\Evals\EvalEventArgs.cs" /> <Compile Include="Src\Variables\Evals\EvalEventArgs.cs" />
<Compile Include="Src\Variables\Evals\NDebugger-Evals.cs" /> <Compile Include="Src\Variables\Evals\NDebugger-Evals.cs" />
<Compile Include="Src\Variables\ArrayValue.cs" /> <Compile Include="Src\Variables\ArrayValue.cs" />
<Compile Include="Src\Variables\MagicValue.cs" />
<Compile Include="Src\Variables\NullValue.cs" /> <Compile Include="Src\Variables\NullValue.cs" />
<Compile Include="Src\Variables\ObjectValue.cs" /> <Compile Include="Src\Variables\ObjectValue.cs" />
<Compile Include="Src\Variables\PrimitiveValue.cs" /> <Compile Include="Src\Variables\PrimitiveValue.cs" />
<Compile Include="Src\Variables\PropertyVariable.cs" /> <Compile Include="Src\Variables\PropertyVariable.cs" />
<Compile Include="Src\Variables\SignatureStream.cs" /> <Compile Include="Src\Variables\SignatureStream.cs" />
<Compile Include="Src\Variables\UnavailableValue.cs" /> <Compile Include="Src\Variables\UnavailableValue.cs" />
<Compile Include="Src\Variables\UnknownValue.cs" />
<Compile Include="Src\Variables\Value.cs" /> <Compile Include="Src\Variables\Value.cs" />
<Compile Include="Src\Variables\ValueEventArgs.cs" /> <Compile Include="Src\Variables\ValueEventArgs.cs" />
<Compile Include="Src\Variables\ValueFactory.cs" /> <Compile Include="Src\Variables\ValueFactory.cs" />
@ -214,4 +212,4 @@
<Content Include="README.TXT" /> <Content Include="README.TXT" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project> </Project>

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

@ -23,6 +23,9 @@ namespace Debugger
bool pauseOnHandledException = false; bool pauseOnHandledException = false;
EventWaitHandle waitForPauseHandle = new EventWaitHandle(false, EventResetMode.ManualReset); EventWaitHandle waitForPauseHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
object sessionID = new object();
object debugeeStateID = new object();
Process currentProcess; Process currentProcess;
public event EventHandler<DebuggingPausedEventArgs> DebuggingPaused; public event EventHandler<DebuggingPausedEventArgs> DebuggingPaused;
@ -88,6 +91,24 @@ namespace Debugger
} }
} }
/// <summary>
/// Indentification of the current debugger session. This value changes whenever debugger is continued
/// </summary>
public object SessionID {
get {
return sessionID;
}
}
/// <summary>
/// Indentification of the state of the debugee. This value changes whenever the state of the debugee significatntly changes
/// </summary>
public object DebugeeStateID {
get {
return debugeeStateID;
}
}
public void AssertPaused() public void AssertPaused()
{ {
if (!IsPaused) { if (!IsPaused) {
@ -145,6 +166,10 @@ namespace Debugger
pausedReason = reason; pausedReason = reason;
sessionID = new object();
if (reason != PausedReason.AllEvalsComplete) {
debugeeStateID = new object();
}
OnDebuggingPaused(reason); OnDebuggingPaused(reason);

38
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/MagicValue.cs

@ -1,38 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
namespace Debugger
{
/// <summary>
/// This value may be returned by Variable.Value instead of null to provide some additional information.
/// </summary>
public class MagicValue
{
object val;
public object Value {
get {
return val;
}
set {
this.val = value;
}
}
public MagicValue(object val)
{
this.val = val;
}
public override string ToString()
{
return val.ToString();
}
}
}

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

@ -28,20 +28,19 @@ namespace Debugger
} }
} }
public override Value Value { protected override Value GetValue()
get { {
if (IsEvaluated) { if (IsEvaluated) {
if (eval.Result != null) { if (eval.Result != null) {
return eval.Result; return eval.Result;
} else { } else {
return new UnavailableValue(debugger, "No return value"); return new UnavailableValue(debugger, "No return value");
} }
} else {
if (eval.Evaluating) {
return new UnavailableValue(debugger, "Evaluating...");
} else { } else {
if (eval.Evaluating) { return new UnavailableValue(debugger, "Evaluation pending");
return new UnavailableValue(debugger, "Evaluating...");
} else {
return new UnavailableValue(debugger, "Evaluation pending");
}
} }
} }
} }

40
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/UnknownValue.cs

@ -1,40 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Runtime.InteropServices;
using Debugger.Interop.CorDebug;
namespace Debugger
{
public class UnknownValue: Value
{
public override string AsString {
get {
return "<unknown>";
}
}
public override string Type {
get {
return "<unknown>";
}
}
internal unsafe UnknownValue(NDebugger debugger, ICorDebugValue corValue):base(debugger, corValue)
{
}
public override bool MayHaveSubVariables {
get {
return false;
}
}
}
}

12
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Value.cs

@ -16,8 +16,8 @@ namespace Debugger
public abstract class Value: RemotingObjectBase public abstract class Value: RemotingObjectBase
{ {
protected NDebugger debugger; protected NDebugger debugger;
protected ICorDebugValue corValue; protected ICorDebugValue corValue;
object debuggerSessionIDatCreation;
public event EventHandler<ValueEventArgs> ValueChanged; public event EventHandler<ValueEventArgs> ValueChanged;
@ -33,6 +33,15 @@ namespace Debugger
} }
} }
/// <summary>
/// If true than the value is no longer valid and you should obtain updated copy
/// </summary>
public bool IsExpired {
get {
return debuggerSessionIDatCreation != debugger.SessionID;
}
}
internal CorElementType CorType { internal CorElementType CorType {
get { get {
return GetCorType(corValue); return GetCorType(corValue);
@ -86,6 +95,7 @@ namespace Debugger
if (corValue != null) { if (corValue != null) {
this.corValue = DereferenceUnbox(corValue); this.corValue = DereferenceUnbox(corValue);
} }
this.debuggerSessionIDatCreation = debugger.SessionID;
} }
public override string ToString() public override string ToString()

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ValueFactory.cs

@ -51,7 +51,7 @@ namespace Debugger
return new ObjectValue(debugger, corValue); return new ObjectValue(debugger, corValue);
default: // Unknown type default: // Unknown type
return new UnknownValue(debugger, corValue); return new UnavailableValue(debugger, "Unknown value type");
} }
} }
} }

17
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Variable.cs

@ -32,9 +32,17 @@ namespace Debugger
} }
} }
public virtual Value Value { /// <summary>
/// Gets value of variable, which is safe to use.
/// </summary>
public Value Value {
get { get {
return val; Value v = GetValue();
if (v.IsExpired) {
return new UnavailableValue(debugger, "The value has expired");
} else {
return v;
}
} }
internal set { internal set {
val = value; val = value;
@ -43,6 +51,11 @@ namespace Debugger
} }
} }
protected virtual Value GetValue()
{
return val;
}
/// <summary> /// <summary>
/// Return up-to-date collection of subvariables. /// Return up-to-date collection of subvariables.
/// This collection is lazy - you need to call its method Update if you want to use it later /// This collection is lazy - you need to call its method Update if you want to use it later

Loading…
Cancel
Save