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ý 19 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 @@ -95,6 +95,8 @@ namespace Debugger
Thread thread = debugger.GetThread(pThread);
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
thread.CheckExpirationOfFunctions();

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

@ -46,6 +46,12 @@ namespace Debugger @@ -46,6 +46,12 @@ namespace Debugger
}
}
public uint Token {
get {
return methodProps.Token;
}
}
public Module Module {
get {
return module;
@ -122,7 +128,7 @@ namespace Debugger @@ -122,7 +128,7 @@ namespace Debugger
// Expiry the function when it is finished
stepOutStepper = CreateStepper();
stepOutStepper.CorStepper.StepOut();
stepOutStepper.StepOut();
stepOutStepper.PauseWhenComplete = false;
stepOutStepper.StepComplete += delegate {
OnExpired(EventArgs.Empty);
@ -176,11 +182,7 @@ namespace Debugger @@ -176,11 +182,7 @@ namespace Debugger
internal Stepper CreateStepper()
{
Stepper stepper = new Stepper(debugger, 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 */);
}
Stepper stepper = new Stepper(this, corILFrame.CreateStepper());
thread.Steppers.Add(stepper);
return stepper;
}
@ -218,14 +220,14 @@ namespace Debugger @@ -218,14 +220,14 @@ namespace Debugger
if (stepIn) {
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.
// The next step over ensures that we at least do step over.
stepper = CreateStepper();
stepper.CorStepper.StepRange(false /* step over */ , nextSt.StepRanges);
stepper.StepOver(nextSt.StepRanges);
debugger.Continue();
}

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

@ -13,21 +13,30 @@ namespace Debugger @@ -13,21 +13,30 @@ namespace Debugger
{
class Stepper
{
NDebugger debugger;
public enum StepperOperation {Idle, StepIn, StepOver, StepOut};
Function function;
ICorDebugStepper corStepper;
StepperOperation operation = StepperOperation.Idle;
bool pauseWhenComplete = true;
public event EventHandler<StepperEventArgs> StepComplete;
public NDebugger Debugger {
get {
return debugger;
return function.Debugger;
}
}
public ICorDebugStepper CorStepper {
public Function Function {
get {
return corStepper;
return function;
}
}
public StepperOperation Operation {
get {
return operation;
}
}
@ -40,10 +49,16 @@ namespace Debugger @@ -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;
// 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() {
@ -51,5 +66,28 @@ namespace Debugger @@ -51,5 +66,28 @@ namespace Debugger
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 @@ -141,7 +141,7 @@ namespace Debugger
internal Stepper GetStepper(ICorDebugStepper corStepper)
{
foreach(Stepper stepper in steppers) {
if (stepper.CorStepper == corStepper) {
if (stepper.IsCorStepper(corStepper)) {
return stepper;
}
}

Loading…
Cancel
Save