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 @@ @@ -193,14 +193,12 @@
<Compile Include="Src\Variables\Evals\EvalEventArgs.cs" />
<Compile Include="Src\Variables\Evals\NDebugger-Evals.cs" />
<Compile Include="Src\Variables\ArrayValue.cs" />
<Compile Include="Src\Variables\MagicValue.cs" />
<Compile Include="Src\Variables\NullValue.cs" />
<Compile Include="Src\Variables\ObjectValue.cs" />
<Compile Include="Src\Variables\PrimitiveValue.cs" />
<Compile Include="Src\Variables\PropertyVariable.cs" />
<Compile Include="Src\Variables\SignatureStream.cs" />
<Compile Include="Src\Variables\UnavailableValue.cs" />
<Compile Include="Src\Variables\UnknownValue.cs" />
<Compile Include="Src\Variables\Value.cs" />
<Compile Include="Src\Variables\ValueEventArgs.cs" />
<Compile Include="Src\Variables\ValueFactory.cs" />
@ -214,4 +212,4 @@ @@ -214,4 +212,4 @@
<Content Include="README.TXT" />
</ItemGroup>
<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 @@ -23,6 +23,9 @@ namespace Debugger
bool pauseOnHandledException = false;
EventWaitHandle waitForPauseHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
object sessionID = new object();
object debugeeStateID = new object();
Process currentProcess;
public event EventHandler<DebuggingPausedEventArgs> DebuggingPaused;
@ -88,6 +91,24 @@ namespace Debugger @@ -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()
{
if (!IsPaused) {
@ -145,6 +166,10 @@ namespace Debugger @@ -145,6 +166,10 @@ namespace Debugger
pausedReason = reason;
sessionID = new object();
if (reason != PausedReason.AllEvalsComplete) {
debugeeStateID = new object();
}
OnDebuggingPaused(reason);

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

@ -1,38 +0,0 @@ @@ -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 @@ -28,20 +28,19 @@ namespace Debugger
}
}
public override Value Value {
get {
if (IsEvaluated) {
if (eval.Result != null) {
return eval.Result;
} else {
return new UnavailableValue(debugger, "No return value");
}
protected override Value GetValue()
{
if (IsEvaluated) {
if (eval.Result != null) {
return eval.Result;
} else {
return new UnavailableValue(debugger, "No return value");
}
} else {
if (eval.Evaluating) {
return new UnavailableValue(debugger, "Evaluating...");
} else {
if (eval.Evaluating) {
return new UnavailableValue(debugger, "Evaluating...");
} else {
return new UnavailableValue(debugger, "Evaluation pending");
}
return new UnavailableValue(debugger, "Evaluation pending");
}
}
}

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

@ -1,40 +0,0 @@ @@ -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 @@ -16,8 +16,8 @@ namespace Debugger
public abstract class Value: RemotingObjectBase
{
protected NDebugger debugger;
protected ICorDebugValue corValue;
object debuggerSessionIDatCreation;
public event EventHandler<ValueEventArgs> ValueChanged;
@ -33,6 +33,15 @@ namespace Debugger @@ -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 {
get {
return GetCorType(corValue);
@ -86,6 +95,7 @@ namespace Debugger @@ -86,6 +95,7 @@ namespace Debugger
if (corValue != null) {
this.corValue = DereferenceUnbox(corValue);
}
this.debuggerSessionIDatCreation = debugger.SessionID;
}
public override string ToString()

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

@ -51,7 +51,7 @@ namespace Debugger @@ -51,7 +51,7 @@ namespace Debugger
return new ObjectValue(debugger, corValue);
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 @@ -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 {
return val;
Value v = GetValue();
if (v.IsExpired) {
return new UnavailableValue(debugger, "The value has expired");
} else {
return v;
}
}
internal set {
val = value;
@ -43,6 +51,11 @@ namespace Debugger @@ -43,6 +51,11 @@ namespace Debugger
}
}
protected virtual Value GetValue()
{
return val;
}
/// <summary>
/// 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

Loading…
Cancel
Save