Browse Source

Worked on stepping (sometimes it was necessary to step more times)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@239 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 21 years ago
parent
commit
97264ff9af
  1. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/MTA2STA.cs
  2. 18
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs
  3. 1
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs
  4. 9
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Modules/Module.cs
  5. 20
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs
  6. 30
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs

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

@ -38,7 +38,7 @@ namespace DebuggerInterop.Core @@ -38,7 +38,7 @@ namespace DebuggerInterop.Core
void TraceMsg(string msg)
{
System.Console.WriteLine("MTA2STA: " + msg);
//System.Console.WriteLine("MTA2STA: " + msg);
}
public object CallInSTA (object targetObject, string functionName, object[] functionParameters)

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

@ -88,6 +88,9 @@ namespace DebuggerLibrary @@ -88,6 +88,9 @@ namespace DebuggerLibrary
void ExitCallback_Paused(PausedReason reason)
{
if (debugger.CurrentThread != null) {
debugger.CurrentThread.DeactivateAllSteppers();
}
if (reason != PausedReason.EvalComplete) {
debugger.OnIsProcessRunningChanged();
debugger.OnDebuggingPaused(reason);
@ -100,15 +103,16 @@ namespace DebuggerLibrary @@ -100,15 +103,16 @@ namespace DebuggerLibrary
public void StepComplete(ICorDebugAppDomain pAppDomain, ICorDebugThread pThread, ICorDebugStepper pStepper, CorDebugStepReason reason)
{
EnterCallback("StepComplete", pThread);
EnterCallback("StepComplete (" + reason.ToString() + ")", pThread);
if (debugger.CurrentThread.CurrentFunction.Module.SymbolsLoaded == false) {
debugger.TraceMessage(" - stepping out of code without symbols");
debugger.StepOut();
return;
}
if (debugger.CurrentThread.LastFunction.Module.SymbolsLoaded == false) {
debugger.TraceMessage(" - leaving code without symbols");
ExitCallback_Paused(PausedReason.StepComplete);
ExitCallback_Continue();
} else {
ExitCallback_Paused(PausedReason.StepComplete);
}
}
public void Breakpoint(ICorDebugAppDomain pAppDomain, ICorDebugThread pThread, IntPtr pBreakpoint)

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

@ -203,6 +203,7 @@ namespace DebuggerLibrary @@ -203,6 +203,7 @@ namespace DebuggerLibrary
internal void TraceMessage(string message)
{
Console.WriteLine("Trace:" + message);
OnDebuggerTraceMessage(message);
}

9
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Modules/Module.cs

@ -98,6 +98,13 @@ namespace DebuggerLibrary @@ -98,6 +98,13 @@ namespace DebuggerLibrary
}
}
public bool JMCStatus {
set {
uint unused = 0;
((ICorDebugModule2)corModule).SetJMCStatus(value?1:0, 0, ref unused);
}
}
internal Module(ICorDebugModule pModule)
{
corModule = pModule;
@ -133,6 +140,8 @@ namespace DebuggerLibrary @@ -133,6 +140,8 @@ namespace DebuggerLibrary
} catch (System.Exception) {
symReader = null;
}
JMCStatus = SymbolsLoaded;
}
public void ApplyChanges(byte[] metadata, byte[] il)

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

@ -130,6 +130,8 @@ namespace DebuggerLibrary @@ -130,6 +130,8 @@ namespace DebuggerLibrary
corFrame.CreateStepper(out stepper);
stepper.StepOut();
debugger.CurrentThread.AddActiveStepper(stepper);
debugger.Continue();
}
@ -147,12 +149,28 @@ namespace DebuggerLibrary @@ -147,12 +149,28 @@ namespace DebuggerLibrary
}
ICorDebugStepper stepper;
if (stepIn) {
corFrame.CreateStepper(out stepper);
fixed (int* ranges = nextSt.StepRanges) {
stepper.StepRange(1 /* true - step in*/ , (IntPtr)ranges, (uint)nextSt.StepRanges.Length / 2);
}
debugger.CurrentThread.AddActiveStepper(stepper);
}
// Mind that step in which ends in code without symblols is cotinued
// so the next step out ensures that we atleast do step over
corFrame.CreateStepper(out stepper);
fixed (int* ranges = nextSt.StepRanges) {
stepper.StepRange(stepIn?1:0, (IntPtr)ranges, (uint)nextSt.StepRanges.Length / 2);
stepper.StepRange(0 /* false - step over*/ , (IntPtr)ranges, (uint)nextSt.StepRanges.Length / 2);
}
debugger.CurrentThread.AddActiveStepper(stepper);
debugger.Continue();
}

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

@ -24,6 +24,7 @@ namespace DebuggerLibrary @@ -24,6 +24,7 @@ namespace DebuggerLibrary
internal ExceptionType currentExceptionType;
Process process;
List<ICorDebugStepper> activeSteppers = new List<ICorDebugStepper>();
uint id;
bool lastSuspendedState = false;
@ -130,6 +131,29 @@ namespace DebuggerLibrary @@ -130,6 +131,29 @@ namespace DebuggerLibrary
}
}
internal IList<ICorDebugStepper> ActiveSteppers {
get {
return activeSteppers.AsReadOnly();
}
}
internal void AddActiveStepper(ICorDebugStepper stepper)
{
activeSteppers.Add(stepper);
}
internal void DeactivateAllSteppers()
{
foreach(ICorDebugStepper stepper in activeSteppers) {
int active;
stepper.IsActive(out active);
if (active != 0) {
stepper.Deactivate();
debugger.TraceMessage("Stepper deactivated");
}
}
activeSteppers.Clear();
}
public event EventHandler<ThreadEventArgs> ThreadStateChanged;
@ -216,5 +240,11 @@ namespace DebuggerLibrary @@ -216,5 +240,11 @@ namespace DebuggerLibrary
return null;
}
}
public Function LastFunction {
get {
return Callstack[0];
}
}
}
}

Loading…
Cancel
Save