Browse Source

Worked on evaluation of properties in debugger

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@55 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 21 years ago
parent
commit
f9d48f1149
  1. 1
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj
  2. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj.user
  3. 1
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Enums/PausedReason.cs
  4. 27
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/EventHandlers/CorDebugEvalEventHandler.cs
  5. 6
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/NDebugger.cs
  6. 40
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Private Classes/Eval.cs
  7. 24
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Private Classes/ManagedCallback.cs
  8. 17
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Public Classes/Function.cs
  9. 45
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PropertyVariable.cs

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

@ -43,6 +43,7 @@ @@ -43,6 +43,7 @@
<Compile Include="Src\Enums\CorTokenType.cs" />
<Compile Include="Src\Enums\PausedReason.cs" />
<Compile Include="Src\EventHandlers\BreakpointEventHandler.cs" />
<Compile Include="Src\EventHandlers\CorDebugEvalEventHandler.cs" />
<Compile Include="Src\EventHandlers\DebuggerEventHandler.cs" />
<Compile Include="Src\EventHandlers\DebuggingIsResumingEventHandler.cs" />
<Compile Include="Src\EventHandlers\DebuggingPausedEventHandler.cs" />

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj.user

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<LastOpenVersion>8.0.41115</LastOpenVersion>
<ProjectView>ShowAllFiles</ProjectView>

1
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Enums/PausedReason.cs

@ -12,6 +12,7 @@ namespace DebuggerLibrary @@ -12,6 +12,7 @@ namespace DebuggerLibrary
ControlCTrap,
Exception,
DebuggerError,
EvalComplete,
CurrentThreadChanged
}
}

27
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/EventHandlers/CorDebugEvalEventHandler.cs

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
// <file>
// <owner name="David Srbecký" email="dsrbecky@post.cz"/>
// </file>
using System;
using DebuggerInterop.Core;
namespace DebuggerLibrary
{
delegate void CorDebugEvalEventHandler (object sender, CorDebugEvalEventArgs e);
class CorDebugEvalEventArgs : System.EventArgs
{
ICorDebugEval corDebugEval;
public ICorDebugEval CorDebugEval {
get {
return corDebugEval;
}
}
public CorDebugEvalEventArgs(ICorDebugEval corDebugEval)
{
this.corDebugEval = corDebugEval;
}
}
}

6
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/NDebugger.cs

@ -146,6 +146,12 @@ namespace DebuggerLibrary @@ -146,6 +146,12 @@ namespace DebuggerLibrary
}
}
internal static ManagedCallback ManagedCallback {
get {
return managedCallback;
}
}
#region Basic functions
static NDebugger()

40
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Private Classes/Eval.cs

@ -18,6 +18,7 @@ namespace DebuggerLibrary @@ -18,6 +18,7 @@ namespace DebuggerLibrary
ICorDebugEval corEval;
ICorDebugFunction corFunction;
ICorDebugValue[] args;
bool complete = false;
public event EventHandler EvalComplete;
@ -32,9 +33,26 @@ namespace DebuggerLibrary @@ -32,9 +33,26 @@ namespace DebuggerLibrary
{
this.corFunction = corFunction;
this.args = args;
NDebugger.ManagedCallback.CorDebugEvalCompleted += new CorDebugEvalEventHandler(CorDebugEvalCompleted);
}
/// <summary>
/// Executes the evaluation and doesn't return until value is evaluated.
///
///
/// </summary>
public void PerformEval()
{
AsyncPerformEval();
while (!complete) {
System.Windows.Forms.Application.DoEvents();
}
}
/// <summary>
/// Executes the evaluation and resumes debugger.
/// </summary>
public void AsyncPerformEval()
{
if (NDebugger.IsProcessRunning) {
throw new DebuggerException("Debugger must be paused");
@ -46,5 +64,27 @@ namespace DebuggerLibrary @@ -46,5 +64,27 @@ namespace DebuggerLibrary
NDebugger.Continue();
}
public ICorDebugValue GetResult()
{
ICorDebugValue corValue;
corEval.GetResult(out corValue);
return corValue;
}
protected virtual void OnEvalComplete(EventArgs e)
{
if (EvalComplete != null) {
EvalComplete(this, e);
}
}
void CorDebugEvalCompleted(object sender, CorDebugEvalEventArgs e)
{
if (e.CorDebugEval == corEval) {
complete = true;
OnEvalComplete();
}
}
}
}

24
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Private Classes/ManagedCallback.cs

@ -13,6 +13,8 @@ namespace DebuggerLibrary @@ -13,6 +13,8 @@ namespace DebuggerLibrary
class ManagedCallback
{
bool handlingCallback = false;
public event CorDebugEvalEventHandler CorDebugEvalCompleted;
public bool HandlingCallback {
get {
@ -42,8 +44,10 @@ namespace DebuggerLibrary @@ -42,8 +44,10 @@ namespace DebuggerLibrary
void ExitCallback_Paused(PausedReason reason)
{
NDebugger.OnDebuggingPaused(reason);
NDebugger.OnIsProcessRunningChanged();
if (reason != PausedReason.EvalComplete) {
NDebugger.OnDebuggingPaused(reason);
NDebugger.OnIsProcessRunningChanged();
}
handlingCallback = false;
}
@ -155,20 +159,12 @@ namespace DebuggerLibrary @@ -155,20 +159,12 @@ namespace DebuggerLibrary
public void EvalComplete(ICorDebugAppDomain pAppDomain, ICorDebugThread pThread, ICorDebugEval eval)
{
EnterCallback("EvalComplete");
/*
foreach (Eval e in Eval.waitingEvals) {
if (e.corEval == eval) {
Eval.waitingEvals.Remove(e);
e.OnEvalComplete();
break;
}
}
NDebugger.OnIsProcessRunningChanged();
handlingCallback = false;
Eval.PerformNextEval();*/
if (CorDebugEvalCompleted != null) {
CorDebugEvalCompleted(this, new CorDebugEvalEventArgs(eval));
}
ExitCallback_Continue(pAppDomain);
ExitCallback_Paused(PausedReason.EvalComplete);
}
public void DebuggerError(ICorDebugProcess pProcess, int errorHR, uint errorCode)

17
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Public Classes/Function.cs

@ -273,7 +273,7 @@ namespace DebuggerLibrary @@ -273,7 +273,7 @@ namespace DebuggerLibrary
AddScopeToVariableCollection(symRootScope, ref collection);
// Properties
/*IntPtr methodEnumPtr = IntPtr.Zero;
IntPtr methodEnumPtr = IntPtr.Zero;
uint methodsFetched;
while(true) {
uint methodToken;
@ -297,17 +297,18 @@ namespace DebuggerLibrary @@ -297,17 +297,18 @@ namespace DebuggerLibrary
name = "Prop:" + name;
ICorDebugValue[] evalArgs;
ICorFunction evalCorFunction;
Module.CorModule.GetFunctionFromToken(methodToken, out corFunction);
if (!isStatic) {
evalArgs = new ICorDebugValue[] {argThis};
} else {
ICorDebugFunction evalCorFunction;
Module.CorModule.GetFunctionFromToken(methodToken, out evalCorFunction);
if (isStatic) {
evalArgs = new ICorDebugValue[0];
} else {
evalArgs = new ICorDebugValue[] {argThis};
}
EvalQueue.AddEval(new Eval(evalCorFunction, evalArgs));
Eval eval = new Eval(evalCorFunction, evalArgs);
EvalQueue.AddEval(eval);
collection.Add(new PropertyVariable(eval, name));
}
}*/
}
}
catch (FrameNotAviableException) {}
catch (SymbolsNotAviableException) {}

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

@ -21,10 +21,16 @@ namespace DebuggerLibrary @@ -21,10 +21,16 @@ namespace DebuggerLibrary
eval.EvalComplete += new EventHandler(EvalComplete);
}
public bool IsEvaluated {
get {
return currentValue != null;
}
}
public override object Value {
get {
if (currentValue == null) {
return String.Empty;
if (!IsEvaluated) {
Evaluate();
}
return currentValue.Value;
}
@ -32,8 +38,8 @@ namespace DebuggerLibrary @@ -32,8 +38,8 @@ namespace DebuggerLibrary
public override string Type {
get {
if (currentValue == null) {
return String.Empty;
if (!IsEvaluated) {
Evaluate();
}
return currentValue.Type;
}
@ -41,22 +47,37 @@ namespace DebuggerLibrary @@ -41,22 +47,37 @@ namespace DebuggerLibrary
public override VariableCollection SubVariables {
get {
if (currentValue == null) {
return new VariableCollection();
if (!IsEvaluated) {
Evaluate();
}
return currentValue.SubVariables;
}
}
internal void EvalComplete(object sender, EventArgs args)
/// <summary>
/// Executes evaluation of variable and doesn't return
/// until value is evaluated.
/// </summary>
public void Evaluate()
{
eval.PerformEval();
}
/// <summary>
/// Executes evaluation of variable and returns imideatly
/// </summary>
public void AsyncEvaluate()
{
eval.AsyncPerformEval();
}
void EvalComplete(object sender, EventArgs args)
{
/*ICorDebugValue corValue;
eval.corEval.GetResult(out corValue);
currentValue = VariableFactory.CreateVariable(corValue, Name);
OnValueEvaluated();*/
currentValue = VariableFactory.CreateVariable(eval.GetResult(), Name);
OnValueEvaluated();
}
internal void OnValueEvaluated()
protected void OnValueEvaluated()
{
if (ValueEvaluated != null) {
ValueEvaluated(this, EventArgs.Empty);

Loading…
Cancel
Save