Browse Source

Added more logging info for steppers

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1396 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
28744898cc
  1. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs
  2. 18
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs
  3. 50
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Stepper.cs
  4. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs

@ -95,6 +95,8 @@ namespace Debugger
Thread thread = debugger.GetThread(pThread); Thread thread = debugger.GetThread(pThread);
Stepper stepper = thread.GetStepper(pStepper); Stepper stepper = thread.GetStepper(pStepper);
debugger.TraceMessage(" - stepper info: " + stepper.Operation + " in " + stepper.Function.Name + " pause = " + stepper.PauseWhenComplete);
// There is a race condition: The tracking step out can be triggered after stepping step over // There is a race condition: The tracking step out can be triggered after stepping step over
thread.CheckExpirationOfFunctions(); thread.CheckExpirationOfFunctions();

18
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs

@ -46,6 +46,12 @@ namespace Debugger
} }
} }
public uint Token {
get {
return methodProps.Token;
}
}
public Module Module { public Module Module {
get { get {
return module; return module;
@ -122,7 +128,7 @@ namespace Debugger
// Expiry the function when it is finished // Expiry the function when it is finished
stepOutStepper = CreateStepper(); stepOutStepper = CreateStepper();
stepOutStepper.CorStepper.StepOut(); stepOutStepper.StepOut();
stepOutStepper.PauseWhenComplete = false; stepOutStepper.PauseWhenComplete = false;
stepOutStepper.StepComplete += delegate { stepOutStepper.StepComplete += delegate {
OnExpired(EventArgs.Empty); OnExpired(EventArgs.Empty);
@ -176,11 +182,7 @@ namespace Debugger
internal Stepper CreateStepper() internal Stepper CreateStepper()
{ {
Stepper stepper = new Stepper(debugger, corILFrame.CreateStepper()); Stepper stepper = new Stepper(this, corILFrame.CreateStepper());
if (stepper.CorStepper.Is<ICorDebugStepper2>()) { // Is the debuggee .NET 2.0?
stepper.CorStepper.SetUnmappedStopMask(CorDebugUnmappedStop.STOP_NONE);
(stepper.CorStepper.CastTo<ICorDebugStepper2>()).SetJMC(1 /* true */);
}
thread.Steppers.Add(stepper); thread.Steppers.Add(stepper);
return stepper; return stepper;
} }
@ -218,14 +220,14 @@ namespace Debugger
if (stepIn) { if (stepIn) {
stepper = CreateStepper(); stepper = CreateStepper();
stepper.CorStepper.StepRange(true /* step in */, nextSt.StepRanges); stepper.StepIn(nextSt.StepRanges);
} }
// Without JMC step in which ends in code without symblols is cotinued. // Without JMC step in which ends in code without symblols is cotinued.
// The next step over ensures that we at least do step over. // The next step over ensures that we at least do step over.
stepper = CreateStepper(); stepper = CreateStepper();
stepper.CorStepper.StepRange(false /* step over */ , nextSt.StepRanges); stepper.StepOver(nextSt.StepRanges);
debugger.Continue(); debugger.Continue();
} }

50
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Stepper.cs

@ -13,21 +13,30 @@ namespace Debugger
{ {
class Stepper class Stepper
{ {
NDebugger debugger; public enum StepperOperation {Idle, StepIn, StepOver, StepOut};
Function function;
ICorDebugStepper corStepper; ICorDebugStepper corStepper;
StepperOperation operation = StepperOperation.Idle;
bool pauseWhenComplete = true; bool pauseWhenComplete = true;
public event EventHandler<StepperEventArgs> StepComplete; public event EventHandler<StepperEventArgs> StepComplete;
public NDebugger Debugger { public NDebugger Debugger {
get { get {
return debugger; return function.Debugger;
}
}
public Function Function {
get {
return function;
} }
} }
public ICorDebugStepper CorStepper { public StepperOperation Operation {
get { get {
return corStepper; return operation;
} }
} }
@ -40,10 +49,16 @@ namespace Debugger
} }
} }
public Stepper(NDebugger debugger, ICorDebugStepper corStepper) public Stepper(Function function, ICorDebugStepper corStepper)
{ {
this.debugger = debugger; this.function = function;
this.corStepper = corStepper; this.corStepper = corStepper;
// Turn on Just-My-Code
if (corStepper.Is<ICorDebugStepper2>()) { // Is the debuggee .NET 2.0?
corStepper.SetUnmappedStopMask(CorDebugUnmappedStop.STOP_NONE);
corStepper.CastTo<ICorDebugStepper2>().SetJMC(1 /* true */);
}
} }
protected internal virtual void OnStepComplete() { protected internal virtual void OnStepComplete() {
@ -51,5 +66,28 @@ namespace Debugger
StepComplete(this, new StepperEventArgs(this)); StepComplete(this, new StepperEventArgs(this));
} }
} }
public bool IsCorStepper(ICorDebugStepper corStepper)
{
return this.corStepper == corStepper;
}
public void StepOut()
{
operation = StepperOperation.StepOut;
corStepper.StepOut();
}
public void StepIn(int[] ranges)
{
operation = StepperOperation.StepIn;
corStepper.StepRange(true /* step in */, ranges);
}
public void StepOver(int[] ranges)
{
operation = StepperOperation.StepOver;
corStepper.StepRange(true /* step over */, ranges);
}
} }
} }

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs

@ -141,7 +141,7 @@ namespace Debugger
internal Stepper GetStepper(ICorDebugStepper corStepper) internal Stepper GetStepper(ICorDebugStepper corStepper)
{ {
foreach(Stepper stepper in steppers) { foreach(Stepper stepper in steppers) {
if (stepper.CorStepper == corStepper) { if (stepper.IsCorStepper(corStepper)) {
return stepper; return stepper;
} }
} }

Loading…
Cancel
Save