Browse Source

Debugger made less static

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@173 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 21 years ago
parent
commit
78d62ad595
  1. 14
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/BreakPointsPad.cs
  2. 11
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs
  3. 13
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs
  4. 8
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs
  5. 12
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs
  6. 17
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs
  7. 127
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  8. 8
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Breakpoints/NDebugger-Breakpoints.cs
  9. 61
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs
  10. 126
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs
  11. 4
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs
  12. 20
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs
  13. 14
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs
  14. 8
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/Eval.cs
  15. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/EvalQueue.cs

14
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/BreakPointsPad.cs

@ -22,6 +22,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{ {
public class BreakPointsPad : AbstractPadContent public class BreakPointsPad : AbstractPadContent
{ {
WindowsDebugger debugger;
ListView breakpointsList; ListView breakpointsList;
ColumnHeader name = new ColumnHeader(); ColumnHeader name = new ColumnHeader();
@ -40,6 +42,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents() void InitializeComponents()
{ {
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
breakpointsList = new ListView(); breakpointsList = new ListView();
breakpointsList.FullRowSelect = true; breakpointsList.FullRowSelect = true;
breakpointsList.AutoArrange = true; breakpointsList.AutoArrange = true;
@ -55,11 +59,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
name.Width = 300; name.Width = 300;
path.Width = 400; path.Width = 400;
NDebugger.DebuggingResumed += new DebuggerEventHandler(debuggerService_OnDebuggingResumed); debugger.DebuggingResumed += new DebuggerEventHandler(debuggerService_OnDebuggingResumed);
NDebugger.Instance.BreakpointAdded += new DebuggerLibrary.BreakpointEventHandler(AddBreakpoint); debugger.BreakpointAdded += new DebuggerLibrary.BreakpointEventHandler(AddBreakpoint);
NDebugger.Instance.BreakpointStateChanged += new DebuggerLibrary.BreakpointEventHandler(RefreshBreakpoint); debugger.BreakpointStateChanged += new DebuggerLibrary.BreakpointEventHandler(RefreshBreakpoint);
NDebugger.Instance.BreakpointRemoved += new DebuggerLibrary.BreakpointEventHandler(RemoveBreakpoint); debugger.BreakpointRemoved += new DebuggerLibrary.BreakpointEventHandler(RemoveBreakpoint);
NDebugger.Instance.BreakpointHit += new DebuggerLibrary.BreakpointEventHandler(Breakpoints_OnBreakpointHit); debugger.BreakpointHit += new DebuggerLibrary.BreakpointEventHandler(Breakpoints_OnBreakpointHit);
RedrawContent(); RedrawContent();
} }

11
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs

@ -22,11 +22,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{ {
public class CallStackPad : AbstractPadContent public class CallStackPad : AbstractPadContent
{ {
ListView callStackList; WindowsDebugger debugger;
// ListView callStackList;
//WindowsDebugger DebuggerService = (WindowsDebugger)((DebuggerService)ServiceManager.Services.GetService(typeof(DebuggerService))).CurrentDebugger;
WindowsDebugger debugger;
ColumnHeader name = new ColumnHeader(); ColumnHeader name = new ColumnHeader();
ColumnHeader language = new ColumnHeader(); ColumnHeader language = new ColumnHeader();
@ -45,6 +43,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents() void InitializeComponents()
{ {
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger; debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
callStackList = new ListView(); callStackList = new ListView();
callStackList.FullRowSelect = true; callStackList.FullRowSelect = true;
callStackList.AutoArrange = true; callStackList.AutoArrange = true;
@ -58,8 +57,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
name.Width = 300; name.Width = 300;
language.Width = 400; language.Width = 400;
NDebugger.IsDebuggingChanged += new DebuggerEventHandler(DebuggerStateChanged); debugger.IsDebuggingChanged += new DebuggerEventHandler(DebuggerStateChanged);
NDebugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged); debugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
RedrawContent(); RedrawContent();
} }

13
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs

@ -22,11 +22,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{ {
public class ExceptionHistoryPad : AbstractPadContent public class ExceptionHistoryPad : AbstractPadContent
{ {
ListView exceptionHistoryList; WindowsDebugger debugger;
// ListView exceptionHistoryList;
//WindowsDebugger DebuggerService = (WindowsDebugger)((DebuggerService)ServiceManager.Services.GetService(typeof(DebuggerService))).CurrentDebugger;
WindowsDebugger debugger;
ColumnHeader time = new ColumnHeader(); ColumnHeader time = new ColumnHeader();
ColumnHeader exception = new ColumnHeader(); ColumnHeader exception = new ColumnHeader();
@ -45,7 +43,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents() void InitializeComponents()
{ {
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger; debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
exceptionHistoryList = new ListView(); exceptionHistoryList = new ListView();
exceptionHistoryList.FullRowSelect = true; exceptionHistoryList.FullRowSelect = true;
exceptionHistoryList.AutoArrange = true; exceptionHistoryList.AutoArrange = true;
@ -60,8 +59,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
location.Width = 400; location.Width = 400;
time.Width = 80; time.Width = 80;
NDebugger.IsDebuggingChanged += new DebuggerEventHandler(DebuggerStateChanged); debugger.IsDebuggingChanged += new DebuggerEventHandler(DebuggerStateChanged);
NDebugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged); debugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
RedrawContent(); RedrawContent();
} }

8
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs

@ -21,6 +21,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{ {
public class LoadedModulesPad : AbstractPadContent public class LoadedModulesPad : AbstractPadContent
{ {
WindowsDebugger debugger;
ListView loadedModulesList; ListView loadedModulesList;
ColumnHeader name = new ColumnHeader(); ColumnHeader name = new ColumnHeader();
@ -46,6 +48,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents() void InitializeComponents()
{ {
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
loadedModulesList = new ListView(); loadedModulesList = new ListView();
loadedModulesList.FullRowSelect = true; loadedModulesList.FullRowSelect = true;
loadedModulesList.AutoArrange = true; loadedModulesList.AutoArrange = true;
@ -64,8 +68,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
timestamp.Width = 0;//80; timestamp.Width = 0;//80;
information.Width = 130; information.Width = 130;
NDebugger.Instance.ModuleLoaded += new DebuggerLibrary.ModuleEventHandler(AddModule); debugger.ModuleLoaded += new DebuggerLibrary.ModuleEventHandler(AddModule);
NDebugger.Instance.ModuleUnloaded += new DebuggerLibrary.ModuleEventHandler(RemoveModule); debugger.ModuleUnloaded += new DebuggerLibrary.ModuleEventHandler(RemoveModule);
RedrawContent(); RedrawContent();
} }

12
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs

@ -22,9 +22,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{ {
public class LocalVarPad : AbstractPadContent public class LocalVarPad : AbstractPadContent
{ {
TreeListView localVarList; WindowsDebugger debugger;
//ClassBrowserIconsService iconsService; TreeListView localVarList;
ColumnHeader name = new ColumnHeader(); ColumnHeader name = new ColumnHeader();
ColumnHeader val = new ColumnHeader(); ColumnHeader val = new ColumnHeader();
@ -43,6 +43,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents() void InitializeComponents()
{ {
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
ImageList imageList = new ImageList(); ImageList imageList = new ImageList();
imageList.Images.Add(IconService.GetBitmap("Icons.16x16.Class")); imageList.Images.Add(IconService.GetBitmap("Icons.16x16.Class"));
imageList.Images.Add(IconService.GetBitmap("Icons.16x16.Field")); imageList.Images.Add(IconService.GetBitmap("Icons.16x16.Field"));
@ -63,7 +65,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
localVarList.BeforeExpand += new TreeListViewCancelEventHandler(localVarList_BeforeExpand); localVarList.BeforeExpand += new TreeListViewCancelEventHandler(localVarList_BeforeExpand);
NDebugger.DebuggingPaused += new DebuggingPausedEventHandler(debuggerService_OnDebuggingPaused); debugger.DebuggingPaused += new DebuggingPausedEventHandler(debuggerService_OnDebuggingPaused);
RedrawContent(); RedrawContent();
} }
@ -74,7 +76,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
val.Text = "Value"; val.Text = "Value";
type.Text = "Type"; type.Text = "Type";
if (NDebugger.IsDebugging && NDebugger.IsProcessRunning == false) { if (debugger.IsDebugging && debugger.IsProcessRunning == false) {
debuggerService_OnDebuggingPaused(this, new DebuggingPausedEventArgs(PausedReason.StepComplete)); debuggerService_OnDebuggingPaused(this, new DebuggingPausedEventArgs(PausedReason.StepComplete));
} }
} }
@ -84,7 +86,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
localVarList.BeginUpdate(); localVarList.BeginUpdate();
localVarList.Items.Clear(); localVarList.Items.Clear();
AddVariables(localVarList.Items, NDebugger.LocalVariables); AddVariables(localVarList.Items, debugger.LocalVariables);
localVarList.EndUpdate(); localVarList.EndUpdate();
} }

17
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs

@ -22,11 +22,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{ {
public class RunningThreadsPad : AbstractPadContent public class RunningThreadsPad : AbstractPadContent
{ {
ListView runningThreadsList; WindowsDebugger debugger;
// ListView runningThreadsList;
//WindowsDebugger DebuggerService = (WindowsDebugger)((DebuggerService)ServiceManager.Services.GetService(typeof(DebuggerService))).CurrentDebugger;
WindowsDebugger debugger;
ColumnHeader id = new ColumnHeader(); ColumnHeader id = new ColumnHeader();
ColumnHeader name = new ColumnHeader(); ColumnHeader name = new ColumnHeader();
@ -47,7 +45,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents() void InitializeComponents()
{ {
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger; debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
runningThreadsList = new ListView(); runningThreadsList = new ListView();
runningThreadsList.FullRowSelect = true; runningThreadsList.FullRowSelect = true;
runningThreadsList.AutoArrange = true; runningThreadsList.AutoArrange = true;
@ -65,10 +64,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
breaked.Width = 80; breaked.Width = 80;
NDebugger.Instance.ThreadStarted += new ThreadEventHandler(AddThread); debugger.ThreadStarted += new ThreadEventHandler(AddThread);
NDebugger.Instance.ThreadStateChanged += new ThreadEventHandler(RefreshThread); debugger.ThreadStateChanged += new ThreadEventHandler(RefreshThread);
NDebugger.Instance.ThreadExited += new ThreadEventHandler(RemoveThread); debugger.ThreadExited += new ThreadEventHandler(RemoveThread);
NDebugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged); debugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
RedrawContent(); RedrawContent();
} }

127
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs

@ -34,7 +34,7 @@ using ICSharpCode.SharpDevelop.Services;
namespace ICSharpCode.SharpDevelop.Services namespace ICSharpCode.SharpDevelop.Services
{ {
public class WindowsDebugger:IDebugger //, IService public class WindowsDebugger:NDebugger, IDebugger //, IService
{ {
public event EventHandler DebugStopped; // FIX: unused public event EventHandler DebugStopped; // FIX: unused
@ -88,15 +88,6 @@ namespace ICSharpCode.SharpDevelop.Services
public void InitializeService() public void InitializeService()
{ {
NDebugger.DebuggerTraceMessage += new MessageEventHandler(DebuggerTraceMessage);
NDebugger.LogMessage += new MessageEventHandler(LogMessage);
NDebugger.DebuggingStarted += new DebuggerEventHandler(DebuggingStarted);
NDebugger.DebuggingPaused += new DebuggingPausedEventHandler(DebuggingPaused);
NDebugger.DebuggingResumed += new DebuggerEventHandler(DebuggingResumed);
NDebugger.DebuggingStopped += new DebuggerEventHandler(DebuggingStopped);
NDebugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
NDebugger.Instance.BreakpointStateChanged += new DebuggerLibrary.BreakpointEventHandler(RestoreSharpdevelopBreakpoint);
DebuggerService.BreakPointAdded += new EventHandler(RestoreNDebuggerBreakpoints); DebuggerService.BreakPointAdded += new EventHandler(RestoreNDebuggerBreakpoints);
DebuggerService.BreakPointRemoved += new EventHandler(RestoreNDebuggerBreakpoints); DebuggerService.BreakPointRemoved += new EventHandler(RestoreNDebuggerBreakpoints);
DebuggerService.BreakPointChanged += new EventHandler(RestoreNDebuggerBreakpoints); DebuggerService.BreakPointChanged += new EventHandler(RestoreNDebuggerBreakpoints);
@ -108,13 +99,6 @@ namespace ICSharpCode.SharpDevelop.Services
public void UnloadService() public void UnloadService()
{ {
NDebugger.DebuggerTraceMessage -= new MessageEventHandler(DebuggerTraceMessage);
NDebugger.LogMessage -= new MessageEventHandler(LogMessage);
NDebugger.DebuggingStarted -= new DebuggerEventHandler(DebuggingStarted);
NDebugger.DebuggingPaused -= new DebuggingPausedEventHandler(DebuggingPaused);
NDebugger.IsProcessRunningChanged -= new DebuggerEventHandler(DebuggerStateChanged);
NDebugger.Instance.BreakpointStateChanged -= new DebuggerLibrary.BreakpointEventHandler(RestoreSharpdevelopBreakpoint);
DebuggerService.BreakPointAdded -= new EventHandler(RestoreNDebuggerBreakpoints); DebuggerService.BreakPointAdded -= new EventHandler(RestoreNDebuggerBreakpoints);
DebuggerService.BreakPointRemoved -= new EventHandler(RestoreNDebuggerBreakpoints); DebuggerService.BreakPointRemoved -= new EventHandler(RestoreNDebuggerBreakpoints);
DebuggerService.BreakPointChanged -= new EventHandler(RestoreNDebuggerBreakpoints); DebuggerService.BreakPointChanged -= new EventHandler(RestoreNDebuggerBreakpoints);
@ -126,17 +110,6 @@ namespace ICSharpCode.SharpDevelop.Services
#endregion #endregion
#region ICSharpCode.SharpDevelop.Services.IDebugger interface implementation #region ICSharpCode.SharpDevelop.Services.IDebugger interface implementation
public bool IsDebugging {
get {
return NDebugger.IsDebugging;
}
}
public bool IsProcessRunning {
get {
return NDebugger.IsProcessRunning;
}
}
public bool SupportsStartStop { public bool SupportsStartStop {
get { get {
@ -150,45 +123,11 @@ namespace ICSharpCode.SharpDevelop.Services
} }
} }
public void StartWithoutDebugging(System.Diagnostics.ProcessStartInfo psi)
{
NDebugger.StartWithoutDebugging(psi);
}
public void Start(string fileName, string workingDirectory, string arguments)
{
NDebugger.Start(fileName, workingDirectory, arguments);
}
public void Stop() public void Stop()
{ {
NDebugger.Terminate(); this.Terminate();
}
public void Break()
{
NDebugger.Break();
}
public void StepInto()
{
NDebugger.StepInto();
}
public void StepOver()
{
NDebugger.StepOver();
} }
public void StepOut()
{
NDebugger.StepOut();
}
public void Continue()
{
NDebugger.Continue();
}
#endregion #endregion
@ -204,36 +143,44 @@ namespace ICSharpCode.SharpDevelop.Services
} }
} }
public void RestoreSharpdevelopBreakpoint(object sender, BreakpointEventArgs e) protected override void OnBreakpointStateChanged(object sender, BreakpointEventArgs e)
{
RestoreSharpdevelopBreakpoint(e.Breakpoint);
}
public void RestoreSharpdevelopBreakpoint(DebuggerLibrary.Breakpoint breakpoint)
{ {
ICSharpCode.Core.Breakpoint sdBreakpoint = e.Breakpoint.Tag as ICSharpCode.Core.Breakpoint; ICSharpCode.Core.Breakpoint sdBreakpoint = breakpoint.Tag as ICSharpCode.Core.Breakpoint;
if (sdBreakpoint != null) { if (sdBreakpoint != null) {
sdBreakpoint.IsEnabled = e.Breakpoint.Enabled; sdBreakpoint.IsEnabled = breakpoint.Enabled;
sdBreakpoint.FileName = e.Breakpoint.SourcecodeSegment.SourceFullFilename; sdBreakpoint.FileName = breakpoint.SourcecodeSegment.SourceFullFilename;
sdBreakpoint.LineNumber = e.Breakpoint.SourcecodeSegment.StartLine; sdBreakpoint.LineNumber = breakpoint.SourcecodeSegment.StartLine;
} }
} }
// Output messages that report status of debugger // Output messages that report status of debugger
void DebuggerTraceMessage(object sender, MessageEventArgs e) protected override void OnDebuggerTraceMessage(string message)
{ {
base.OnDebuggerTraceMessage(message);
if (messageViewCategoryDebuggerLog != null) { if (messageViewCategoryDebuggerLog != null) {
messageViewCategoryDebuggerLog.AppendText(e.Message + "\n"); messageViewCategoryDebuggerLog.AppendText(message + "\n");
System.Console.WriteLine(e.Message); System.Console.WriteLine(message);
} }
} }
// Output messages form debuged program that are caused by System.Diagnostics.Trace.WriteLine(), etc... // Output messages form debuged program that are caused by System.Diagnostics.Trace.WriteLine(), etc...
void LogMessage(object sender, MessageEventArgs e) protected override void OnLogMessage(string message)
{ {
DebuggerTraceMessage(this, e); base.OnLogMessage(message);
OnDebuggerTraceMessage(message);
if (messageViewCategoryDebug != null) { if (messageViewCategoryDebug != null) {
messageViewCategoryDebug.AppendText(e.Message + "\n"); messageViewCategoryDebug.AppendText(message + "\n");
} }
} }
void DebuggingStarted(object sender, DebuggerEventArgs e) protected override void OnDebuggingStarted()
{ {
base.OnDebuggingStarted();
// Initialize // Initialize
/*PadDescriptor cmv = (CompilerMessageView)WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView)); /*PadDescriptor cmv = (CompilerMessageView)WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView));
if (messageViewCategoryDebug == null) { if (messageViewCategoryDebug == null) {
@ -247,11 +194,12 @@ namespace ICSharpCode.SharpDevelop.Services
messageViewCategoryDebuggerLog.ClearText();*/ messageViewCategoryDebuggerLog.ClearText();*/
} }
void DebuggingPaused(object sender, DebuggingPausedEventArgs e) protected override void OnDebuggingPaused(PausedReason reason)
{ {
if (e.Reason == PausedReason.Exception) { base.OnDebuggingPaused(reason);
exceptionHistory.Add(NDebugger.CurrentThread.CurrentException); if (reason == PausedReason.Exception) {
if (NDebugger.CurrentThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED && (NDebugger.CatchHandledExceptions == false)) { exceptionHistory.Add(CurrentThread.CurrentException);
if (CurrentThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED && (CatchHandledExceptions == false)) {
// Ignore the exception // Ignore the exception
Continue(); Continue();
return; return;
@ -261,10 +209,10 @@ namespace ICSharpCode.SharpDevelop.Services
//MessageBox.Show("Exception was thrown in debugee:\n" + NDebugger.CurrentThread.CurrentException.ToString()); //MessageBox.Show("Exception was thrown in debugee:\n" + NDebugger.CurrentThread.CurrentException.ToString());
ExceptionForm form = new ExceptionForm(); ExceptionForm form = new ExceptionForm();
form.label.Text = "Exception " + form.label.Text = "Exception " +
NDebugger.CurrentThread.CurrentException.Type + CurrentThread.CurrentException.Type +
" was thrown in debugee:\n" + " was thrown in debugee:\n" +
NDebugger.CurrentThread.CurrentException.Message; CurrentThread.CurrentException.Message;
form.pictureBox.Image = ResourceService.GetBitmap((NDebugger.CurrentThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED)?"Icons.32x32.Warning":"Icons.32x32.Error"); form.pictureBox.Image = ResourceService.GetBitmap((CurrentThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED)?"Icons.32x32.Warning":"Icons.32x32.Error");
form.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm); form.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm);
switch (form.result) { switch (form.result) {
case ExceptionForm.Result.Break: case ExceptionForm.Result.Break:
@ -280,20 +228,22 @@ namespace ICSharpCode.SharpDevelop.Services
} }
try { try {
SelectThread(NDebugger.CurrentThread); SelectThread(CurrentThread);
} catch (CurrentThreadNotAviableException) {} } catch (CurrentThreadNotAviableException) {}
JumpToCurrentLine(); JumpToCurrentLine();
} }
void DebuggingResumed(object sender, DebuggerEventArgs e) protected override void OnDebuggingResumed()
{ {
base.OnDebuggingResumed();
selectedThread = null; selectedThread = null;
selectedFunction = null; selectedFunction = null;
DebuggerService.RemoveCurrentLineMarker(); DebuggerService.RemoveCurrentLineMarker();
} }
void DebuggingStopped(object sender, DebuggerEventArgs e) protected override void OnDebuggingStopped()
{ {
base.OnDebuggingStopped();
exceptionHistory.Clear(); exceptionHistory.Clear();
//DebuggerService.Stop();//TODO: delete //DebuggerService.Stop();//TODO: delete
} }
@ -337,8 +287,9 @@ namespace ICSharpCode.SharpDevelop.Services
} }
} }
public void DebuggerStateChanged(object sender, DebuggerEventArgs e) protected override void OnIsProcessRunningChanged()
{ {
base.OnIsProcessRunningChanged();
UpdateToolbars(); UpdateToolbars();
} }
@ -355,8 +306,8 @@ namespace ICSharpCode.SharpDevelop.Services
/// </summary> /// </summary>
public string GetValueAsString(string variableName) public string GetValueAsString(string variableName)
{ {
if (!NDebugger.IsDebugging || NDebugger.IsProcessRunning) return null; if (!IsDebugging || IsProcessRunning) return null;
VariableCollection collection = NDebugger.LocalVariables; VariableCollection collection = LocalVariables;
if (collection == null) if (collection == null)
return null; return null;
foreach (Variable v in collection) { foreach (Variable v in collection) {

8
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Breakpoints/NDebugger-Breakpoints.cs

@ -20,28 +20,28 @@ namespace DebuggerLibrary
public event BreakpointEventHandler BreakpointStateChanged; public event BreakpointEventHandler BreakpointStateChanged;
public event BreakpointEventHandler BreakpointHit; public event BreakpointEventHandler BreakpointHit;
protected void OnBreakpointAdded(Breakpoint breakpoint) protected virtual void OnBreakpointAdded(Breakpoint breakpoint)
{ {
if (BreakpointAdded != null) { if (BreakpointAdded != null) {
BreakpointAdded(this, new BreakpointEventArgs(breakpoint)); BreakpointAdded(this, new BreakpointEventArgs(breakpoint));
} }
} }
protected void OnBreakpointRemoved(Breakpoint breakpoint) protected virtual void OnBreakpointRemoved(Breakpoint breakpoint)
{ {
if (BreakpointRemoved != null) { if (BreakpointRemoved != null) {
BreakpointRemoved(this, new BreakpointEventArgs(breakpoint)); BreakpointRemoved(this, new BreakpointEventArgs(breakpoint));
} }
} }
protected void OnBreakpointStateChanged(object sender, BreakpointEventArgs e) protected virtual void OnBreakpointStateChanged(object sender, BreakpointEventArgs e)
{ {
if (BreakpointStateChanged != null) { if (BreakpointStateChanged != null) {
BreakpointStateChanged(this, new BreakpointEventArgs(e.Breakpoint)); BreakpointStateChanged(this, new BreakpointEventArgs(e.Breakpoint));
} }
} }
protected void OnBreakpointHit(object sender, BreakpointEventArgs e) protected virtual void OnBreakpointHit(object sender, BreakpointEventArgs e)
{ {
if (BreakpointHit != null) { if (BreakpointHit != null) {
BreakpointHit(this, new BreakpointEventArgs(e.Breakpoint)); BreakpointHit(this, new BreakpointEventArgs(e.Breakpoint));

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

@ -18,6 +18,7 @@ namespace DebuggerLibrary
{ {
class ManagedCallback class ManagedCallback
{ {
NDebugger debugger = NDebugger.Instance;
bool handlingCallback = false; bool handlingCallback = false;
public event CorDebugEvalEventHandler CorDebugEvalCompleted; public event CorDebugEvalEventHandler CorDebugEvalCompleted;
@ -31,28 +32,28 @@ namespace DebuggerLibrary
void EnterCallback(string name) void EnterCallback(string name)
{ {
handlingCallback = true; handlingCallback = true;
NDebugger.IsProcessRunning = false; debugger.IsProcessRunning = false;
NDebugger.CurrentThread = null; debugger.CurrentThread = null;
NDebugger.TraceMessage("Callback: " + name); debugger.TraceMessage("Callback: " + name);
} }
void ExitCallback_Continue(ICorDebugAppDomain pAppDomain) void ExitCallback_Continue(ICorDebugAppDomain pAppDomain)
{ {
NDebugger.Continue(pAppDomain); debugger.Continue(pAppDomain);
handlingCallback = false; handlingCallback = false;
} }
void ExitCallback_Continue() void ExitCallback_Continue()
{ {
NDebugger.Continue(); debugger.Continue();
handlingCallback = false; handlingCallback = false;
} }
void ExitCallback_Paused(PausedReason reason) void ExitCallback_Paused(PausedReason reason)
{ {
if (reason != PausedReason.EvalComplete) { if (reason != PausedReason.EvalComplete) {
NDebugger.OnDebuggingPaused(reason); debugger.OnDebuggingPaused(reason);
NDebugger.OnIsProcessRunningChanged(); debugger.OnIsProcessRunningChanged();
} }
handlingCallback = false; handlingCallback = false;
} }
@ -64,11 +65,11 @@ namespace DebuggerLibrary
{ {
EnterCallback("StepComplete"); EnterCallback("StepComplete");
NDebugger.CurrentThread = NDebugger.Instance.GetThread(pThread); debugger.CurrentThread = debugger.GetThread(pThread);
if (NDebugger.CurrentThread.CurrentFunction.Module.SymbolsLoaded == false) { if (debugger.CurrentThread.CurrentFunction.Module.SymbolsLoaded == false) {
NDebugger.TraceMessage(" - stepping out of code without symbols"); debugger.TraceMessage(" - stepping out of code without symbols");
NDebugger.StepOut(); debugger.StepOut();
return; return;
} }
@ -79,11 +80,11 @@ namespace DebuggerLibrary
{ {
EnterCallback("Breakpoint"); EnterCallback("Breakpoint");
NDebugger.CurrentThread = NDebugger.Instance.GetThread(pThread); debugger.CurrentThread = debugger.GetThread(pThread);
ExitCallback_Paused(PausedReason.Breakpoint); ExitCallback_Paused(PausedReason.Breakpoint);
foreach (Breakpoint b in NDebugger.Instance.Breakpoints) { foreach (Breakpoint b in debugger.Breakpoints) {
if (b.Equals(pBreakpoint)) { if (b.Equals(pBreakpoint)) {
b.OnBreakpointHit(); b.OnBreakpointHit();
} }
@ -101,7 +102,7 @@ namespace DebuggerLibrary
{ {
EnterCallback("Break"); EnterCallback("Break");
NDebugger.CurrentThread = NDebugger.Instance.GetThread(pThread); debugger.CurrentThread = debugger.GetThread(pThread);
ExitCallback_Paused(PausedReason.Break); ExitCallback_Paused(PausedReason.Break);
} }
@ -150,7 +151,7 @@ namespace DebuggerLibrary
{ {
EnterCallback("LogMessage"); EnterCallback("LogMessage");
NDebugger.OnLogMessage(pMessage); debugger.OnLogMessage(pMessage);
ExitCallback_Continue(pAppDomain); ExitCallback_Continue(pAppDomain);
} }
@ -220,7 +221,7 @@ namespace DebuggerLibrary
{ {
EnterCallback("LoadModule"); EnterCallback("LoadModule");
NDebugger.Instance.AddModule(pModule); debugger.AddModule(pModule);
ExitCallback_Continue(pAppDomain); ExitCallback_Continue(pAppDomain);
} }
@ -236,7 +237,7 @@ namespace DebuggerLibrary
if (pThread != null) if (pThread != null)
{ {
EnterCallback("NameChange: pThread"); EnterCallback("NameChange: pThread");
Thread thread = NDebugger.Instance.GetThread(pThread); Thread thread = debugger.GetThread(pThread);
thread.HasBeenLoaded = true; thread.HasBeenLoaded = true;
thread.OnThreadStateChanged(); thread.OnThreadStateChanged();
ExitCallback_Continue(); ExitCallback_Continue();
@ -248,10 +249,10 @@ namespace DebuggerLibrary
{ {
EnterCallback("CreateThread"); EnterCallback("CreateThread");
NDebugger.Instance.AddThread(pThread); debugger.AddThread(pThread);
if (NDebugger.MainThread == null) { if (debugger.MainThread == null) {
NDebugger.MainThread = NDebugger.Instance.GetThread(pThread); debugger.MainThread = debugger.GetThread(pThread);
} }
ExitCallback_Continue(pAppDomain); ExitCallback_Continue(pAppDomain);
@ -279,7 +280,7 @@ namespace DebuggerLibrary
{ {
EnterCallback("UnloadModule"); EnterCallback("UnloadModule");
NDebugger.Instance.RemoveModule(pModule); debugger.RemoveModule(pModule);
ExitCallback_Continue(pAppDomain); ExitCallback_Continue(pAppDomain);
} }
@ -295,15 +296,15 @@ namespace DebuggerLibrary
{ {
EnterCallback("ExitThread"); EnterCallback("ExitThread");
Thread thread = NDebugger.Instance.GetThread(pThread); Thread thread = debugger.GetThread(pThread);
if (NDebugger.CurrentThread == thread) if (debugger.CurrentThread == thread)
NDebugger.CurrentThread = null; debugger.CurrentThread = null;
if (NDebugger.MainThread == thread) if (debugger.MainThread == thread)
NDebugger.MainThread = null; debugger.MainThread = null;
NDebugger.Instance.RemoveThread(thread); debugger.RemoveThread(thread);
ExitCallback_Continue(pAppDomain); ExitCallback_Continue(pAppDomain);
} }
@ -319,7 +320,7 @@ namespace DebuggerLibrary
{ {
EnterCallback("ExitProcess"); EnterCallback("ExitProcess");
NDebugger.Instance.ResetEnvironment(); debugger.ResetEnvironment();
} }
@ -357,8 +358,8 @@ namespace DebuggerLibrary
// return; // return;
//} //}
NDebugger.CurrentThread = NDebugger.Instance.GetThread(pThread); debugger.CurrentThread = debugger.GetThread(pThread);
NDebugger.CurrentThread.CurrentExceptionType = (ExceptionType)dwEventType; debugger.CurrentThread.CurrentExceptionType = (ExceptionType)dwEventType;
ExitCallback_Paused(PausedReason.Exception); ExitCallback_Paused(PausedReason.Exception);
} }

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

@ -15,10 +15,13 @@ namespace DebuggerLibrary
{ {
public partial class NDebugger public partial class NDebugger
{ {
static NDebugger instance = new NDebugger(); static NDebugger instance = null;
public static NDebugger Instance { public static NDebugger Instance {
get { get {
if (instance == null) {
throw new System.Exception("Create instance of NDebugger first");
}
return instance; return instance;
} }
set { set {
@ -26,21 +29,21 @@ namespace DebuggerLibrary
} }
} }
static ICorDebug corDebug; ICorDebug corDebug;
static ManagedCallback managedCallback; ManagedCallback managedCallback;
static ManagedCallbackProxy managedCallbackProxy; ManagedCallbackProxy managedCallbackProxy;
static Process mainProcess; Process mainProcess;
public static bool CatchHandledExceptions = false; public bool CatchHandledExceptions = false;
static internal ICorDebug CorDebug { internal ICorDebug CorDebug {
get { get {
return corDebug; return corDebug;
} }
} }
static internal Process CurrentProcess { internal Process CurrentProcess {
get { get {
return mainProcess; return mainProcess;
} }
@ -61,7 +64,7 @@ namespace DebuggerLibrary
} }
} }
internal static ManagedCallback ManagedCallback { internal ManagedCallback ManagedCallback {
get { get {
return managedCallback; return managedCallback;
} }
@ -69,8 +72,14 @@ namespace DebuggerLibrary
#region Basic functions #region Basic functions
private NDebugger() public NDebugger()
{ {
if (instance != null) {
throw new System.Exception("You can create only one instance of NDebugger at the moment.");
} else {
instance = this;
}
InitDebugger(); InitDebugger();
ResetEnvironment(); ResetEnvironment();
@ -82,7 +91,7 @@ namespace DebuggerLibrary
//corDebug.Terminate(); //corDebug.Terminate();
} }
static internal void InitDebugger() internal void InitDebugger()
{ {
int size; int size;
NativeMethods.GetCORVersion(null, 0, out size); NativeMethods.GetCORVersion(null, 0, out size);
@ -118,29 +127,31 @@ namespace DebuggerLibrary
#region Public events #region Public events
static public event DebuggerEventHandler DebuggingStarted; public event DebuggerEventHandler DebuggingStarted;
static internal void OnDebuggingStarted() protected internal virtual void OnDebuggingStarted()
{ {
TraceMessage ("Debugger event: OnDebuggingStarted()"); TraceMessage ("Debugger event: OnDebuggingStarted()");
if (DebuggingStarted != null) if (DebuggingStarted != null) {
DebuggingStarted(null, new DebuggerEventArgs()); DebuggingStarted(null, new DebuggerEventArgs());
}
} }
static public event DebuggingPausedEventHandler DebuggingPaused; public event DebuggingPausedEventHandler DebuggingPaused;
static internal void OnDebuggingPaused(PausedReason reason) protected internal virtual void OnDebuggingPaused(PausedReason reason)
{ {
TraceMessage ("Debugger event: OnDebuggingPaused(" + reason.ToString() + ")"); TraceMessage ("Debugger event: OnDebuggingPaused(" + reason.ToString() + ")");
if (DebuggingPaused != null) if (DebuggingPaused != null) {
DebuggingPaused(null, new DebuggingPausedEventArgs(reason)); DebuggingPaused(null, new DebuggingPausedEventArgs(reason));
}
} }
static public event DebuggingIsResumingEventHandler DebuggingIsResuming; public event DebuggingIsResumingEventHandler DebuggingIsResuming;
static internal void OnDebuggingIsResuming(ref bool abort) protected internal virtual void OnDebuggingIsResuming(ref bool abort)
{ {
if (DebuggingIsResuming != null) { if (DebuggingIsResuming != null) {
TraceMessage ("Debugger event: OnDebuggingIsResuming(" + abort.ToString() + ")"); TraceMessage ("Debugger event: OnDebuggingIsResuming(" + abort.ToString() + ")");
@ -156,66 +167,77 @@ namespace DebuggerLibrary
} }
static public event DebuggerEventHandler DebuggingResumed; public event DebuggerEventHandler DebuggingResumed;
static internal void OnDebuggingResumed() protected internal virtual void OnDebuggingResumed()
{ {
TraceMessage ("Debugger event: OnDebuggingResumed()"); TraceMessage ("Debugger event: OnDebuggingResumed()");
if (DebuggingResumed != null) if (DebuggingResumed != null) {
DebuggingResumed(null, new DebuggerEventArgs()); DebuggingResumed(null, new DebuggerEventArgs());
}
} }
static public event DebuggerEventHandler DebuggingStopped; public event DebuggerEventHandler DebuggingStopped;
static internal void OnDebuggingStopped() protected internal virtual void OnDebuggingStopped()
{ {
TraceMessage ("Debugger event: OnDebuggingStopped()"); TraceMessage ("Debugger event: OnDebuggingStopped()");
if (DebuggingStopped != null) if (DebuggingStopped != null) {
DebuggingStopped(null, new DebuggerEventArgs()); DebuggingStopped(null, new DebuggerEventArgs());
}
} }
static public event DebuggerEventHandler IsProcessRunningChanged; public event DebuggerEventHandler IsProcessRunningChanged;
static internal void OnIsProcessRunningChanged() protected internal virtual void OnIsProcessRunningChanged()
{ {
TraceMessage ("Debugger event: OnIsProcessRunningChanged()"); TraceMessage ("Debugger event: OnIsProcessRunningChanged()");
if (IsProcessRunningChanged != null) if (IsProcessRunningChanged != null) {
IsProcessRunningChanged(null, new DebuggerEventArgs()); IsProcessRunningChanged(null, new DebuggerEventArgs());
}
} }
static public event DebuggerEventHandler IsDebuggingChanged; public event DebuggerEventHandler IsDebuggingChanged;
static internal void OnIsDebuggingChanged() protected internal virtual void OnIsDebuggingChanged()
{ {
TraceMessage ("Debugger event: OnIsDebuggingChanged()"); TraceMessage ("Debugger event: OnIsDebuggingChanged()");
if (IsDebuggingChanged != null) if (IsDebuggingChanged != null) {
IsDebuggingChanged(null, new DebuggerEventArgs()); IsDebuggingChanged(null, new DebuggerEventArgs());
}
} }
/// <summary> /// <summary>
/// Fired when System.Diagnostics.Trace.WriteLine() is called in debuged process /// Fired when System.Diagnostics.Trace.WriteLine() is called in debuged process
/// </summary> /// </summary>
static public event MessageEventHandler LogMessage; public event MessageEventHandler LogMessage;
static internal void OnLogMessage(string message) protected internal virtual void OnLogMessage(string message)
{ {
TraceMessage ("Debugger event: OnLogMessage(\"" + message + "\")"); TraceMessage ("Debugger event: OnLogMessage(\"" + message + "\")");
if (LogMessage != null) if (LogMessage != null) {
LogMessage(null, new MessageEventArgs(message)); LogMessage(null, new MessageEventArgs(message));
}
} }
/// <summary> /// <summary>
/// Internal: Used to debug the debugger library. /// Internal: Used to debug the debugger library.
/// </summary> /// </summary>
static public event MessageEventHandler DebuggerTraceMessage; public event MessageEventHandler DebuggerTraceMessage;
static internal void TraceMessage(string message) protected internal virtual void OnDebuggerTraceMessage(string message)
{ {
if (DebuggerTraceMessage != null) if (DebuggerTraceMessage != null) {
DebuggerTraceMessage(null, new MessageEventArgs(message)); DebuggerTraceMessage(null, new MessageEventArgs(message));
}
}
internal void TraceMessage(string message)
{
OnDebuggerTraceMessage(message);
} }
@ -223,14 +245,14 @@ namespace DebuggerLibrary
#region Execution control #region Execution control
static internal void Continue(ICorDebugAppDomain pAppDomain) internal void Continue(ICorDebugAppDomain pAppDomain)
{ {
ICorDebugProcess outProcess; ICorDebugProcess outProcess;
pAppDomain.GetProcess(out outProcess); pAppDomain.GetProcess(out outProcess);
outProcess.Continue(0); outProcess.Continue(0);
} }
static public void StartWithoutDebugging(System.Diagnostics.ProcessStartInfo psi) public void StartWithoutDebugging(System.Diagnostics.ProcessStartInfo psi)
{ {
System.Diagnostics.Process process; System.Diagnostics.Process process;
process = new System.Diagnostics.Process(); process = new System.Diagnostics.Process();
@ -238,7 +260,7 @@ namespace DebuggerLibrary
process.Start(); process.Start();
} }
static public void Start(string filename, string workingDirectory, string arguments) public void Start(string filename, string workingDirectory, string arguments)
{ {
CurrentProcess = Process.CreateProcess(filename, workingDirectory, arguments); CurrentProcess = Process.CreateProcess(filename, workingDirectory, arguments);
} }
@ -274,7 +296,7 @@ namespace DebuggerLibrary
} }
static public bool IsProcessRunning { public bool IsProcessRunning {
get { get {
if (!IsDebugging) return false; if (!IsDebugging) return false;
return CurrentProcess.IsProcessRunning; return CurrentProcess.IsProcessRunning;
@ -285,13 +307,13 @@ namespace DebuggerLibrary
} }
} }
static public bool IsDebugging { public bool IsDebugging {
get { get {
return (CurrentProcess != null); return (CurrentProcess != null);
} }
} }
static public Thread CurrentThread { public Thread CurrentThread {
get { get {
if (!IsDebugging) return null; if (!IsDebugging) return null;
return CurrentProcess.CurrentThread; return CurrentProcess.CurrentThread;
@ -301,7 +323,7 @@ namespace DebuggerLibrary
} }
} }
static public Thread MainThread { public Thread MainThread {
get { get {
if (!IsDebugging) return null; if (!IsDebugging) return null;
return CurrentProcess.MainThread; return CurrentProcess.MainThread;
@ -311,46 +333,46 @@ namespace DebuggerLibrary
} }
} }
static public SourcecodeSegment NextStatement { public SourcecodeSegment NextStatement {
get { get {
if (!IsDebugging) return null; if (!IsDebugging) return null;
return CurrentProcess.NextStatement; return CurrentProcess.NextStatement;
} }
} }
static public VariableCollection LocalVariables { public VariableCollection LocalVariables {
get { get {
if (!IsDebugging) return null; if (!IsDebugging) return null;
return CurrentProcess.LocalVariables; return CurrentProcess.LocalVariables;
} }
} }
static public void Break() public void Break()
{ {
CurrentProcess.Break(); CurrentProcess.Break();
} }
static public void StepInto() public void StepInto()
{ {
CurrentProcess.StepInto(); CurrentProcess.StepInto();
} }
static public void StepOver() public void StepOver()
{ {
CurrentProcess.StepOver(); CurrentProcess.StepOver();
} }
static public void StepOut() public void StepOut()
{ {
CurrentProcess.StepOut(); CurrentProcess.StepOut();
} }
static public void Continue() public void Continue()
{ {
CurrentProcess.Continue(); CurrentProcess.Continue();
} }
static public void Terminate() public void Terminate()
{ {
CurrentProcess.Terminate(); CurrentProcess.Terminate();
} }

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

@ -144,7 +144,7 @@ namespace DebuggerLibrary
corFrame.CreateStepper(out stepper); corFrame.CreateStepper(out stepper);
stepper.StepOut(); stepper.StepOut();
NDebugger.Continue(); NDebugger.Instance.Continue();
} }
private unsafe void Step(bool stepIn) private unsafe void Step(bool stepIn)
@ -169,7 +169,7 @@ namespace DebuggerLibrary
stepper.StepRange(stepIn?1:0, (IntPtr)ranges, (uint)nextSt.StepRanges.Length / 2); stepper.StepRange(stepIn?1:0, (IntPtr)ranges, (uint)nextSt.StepRanges.Length / 2);
} }
NDebugger.Continue(); NDebugger.Instance.Continue();
} }
/// <summary> /// <summary>

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

@ -43,8 +43,8 @@ namespace DebuggerLibrary
if (mainThread == null) { if (mainThread == null) {
mainThread = value; mainThread = value;
} }
if (NDebugger.ManagedCallback.HandlingCallback == false) { if (NDebugger.Instance.ManagedCallback.HandlingCallback == false) {
NDebugger.OnDebuggingPaused(PausedReason.CurrentThreadChanged); NDebugger.Instance.OnDebuggingPaused(PausedReason.CurrentThreadChanged);
} }
} }
} }
@ -93,7 +93,7 @@ namespace DebuggerLibrary
static public unsafe Process StartInternal(string filename, string workingDirectory, string arguments) static public unsafe Process StartInternal(string filename, string workingDirectory, string arguments)
{ {
NDebugger.TraceMessage("Executing " + filename); NDebugger.Instance.TraceMessage("Executing " + filename);
_SECURITY_ATTRIBUTES secAttr = new _SECURITY_ATTRIBUTES(); _SECURITY_ATTRIBUTES secAttr = new _SECURITY_ATTRIBUTES();
secAttr.bInheritHandle = 0; secAttr.bInheritHandle = 0;
@ -108,7 +108,7 @@ namespace DebuggerLibrary
fixed (uint* pprocessStartupInfo = processStartupInfo) fixed (uint* pprocessStartupInfo = processStartupInfo)
fixed (uint* pprocessInfo = processInfo) fixed (uint* pprocessInfo = processInfo)
NDebugger.CorDebug.CreateProcess( NDebugger.Instance.CorDebug.CreateProcess(
filename, // lpApplicationName filename, // lpApplicationName
arguments, // lpCommandLine arguments, // lpCommandLine
ref secAttr, // lpProcessAttributes ref secAttr, // lpProcessAttributes
@ -136,8 +136,8 @@ namespace DebuggerLibrary
corProcess.Stop(5000); // TODO: Hardcoded value corProcess.Stop(5000); // TODO: Hardcoded value
isProcessRunning = false; isProcessRunning = false;
NDebugger.OnDebuggingPaused(PausedReason.Break); NDebugger.Instance.OnDebuggingPaused(PausedReason.Break);
NDebugger.OnIsProcessRunningChanged(); NDebugger.Instance.OnIsProcessRunningChanged();
} }
public void StepInto() public void StepInto()
@ -175,13 +175,13 @@ namespace DebuggerLibrary
} }
bool abort = false; bool abort = false;
NDebugger.OnDebuggingIsResuming(ref abort); NDebugger.Instance.OnDebuggingIsResuming(ref abort);
if (abort == true) return; if (abort == true) return;
isProcessRunning = true; isProcessRunning = true;
if (NDebugger.ManagedCallback.HandlingCallback == false) { if (NDebugger.Instance.ManagedCallback.HandlingCallback == false) {
NDebugger.OnDebuggingResumed(); NDebugger.Instance.OnDebuggingResumed();
NDebugger.OnIsProcessRunningChanged(); NDebugger.Instance.OnIsProcessRunningChanged();
} }
corProcess.Continue(0); corProcess.Continue(0);

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

@ -62,7 +62,7 @@ namespace DebuggerLibrary
public bool Suspended { public bool Suspended {
get { get {
if (NDebugger.IsProcessRunning) return lastSuspendedState; if (NDebugger.Instance.IsProcessRunning) return lastSuspendedState;
CorDebugThreadState state; CorDebugThreadState state;
corThread.GetDebugState(out state); corThread.GetDebugState(out state);
@ -77,7 +77,7 @@ namespace DebuggerLibrary
public ThreadPriority Priority { public ThreadPriority Priority {
get { get {
if (!HasBeenLoaded) return lastPriority; if (!HasBeenLoaded) return lastPriority;
if (NDebugger.IsProcessRunning) return lastPriority; if (NDebugger.Instance.IsProcessRunning) return lastPriority;
Variable runTimeVar = RuntimeVariable; Variable runTimeVar = RuntimeVariable;
if (runTimeVar is NullRefVariable) return ThreadPriority.Normal; if (runTimeVar is NullRefVariable) return ThreadPriority.Normal;
@ -90,7 +90,7 @@ namespace DebuggerLibrary
public Variable RuntimeVariable { public Variable RuntimeVariable {
get { get {
if (!HasBeenLoaded) throw new UnableToGetPropertyException(this, "runtimeVariable", "Thread has not started jet"); if (!HasBeenLoaded) throw new UnableToGetPropertyException(this, "runtimeVariable", "Thread has not started jet");
if (NDebugger.IsProcessRunning) throw new UnableToGetPropertyException(this, "runtimeVariable", "Process is running"); if (NDebugger.Instance.IsProcessRunning) throw new UnableToGetPropertyException(this, "runtimeVariable", "Process is running");
ICorDebugValue corValue; ICorDebugValue corValue;
corThread.GetObject(out corValue); corThread.GetObject(out corValue);
return VariableFactory.CreateVariable(corValue, "Thread" + ID); return VariableFactory.CreateVariable(corValue, "Thread" + ID);
@ -101,7 +101,7 @@ namespace DebuggerLibrary
public string Name { public string Name {
get { get {
if (!HasBeenLoaded) return lastName; if (!HasBeenLoaded) return lastName;
if (NDebugger.IsProcessRunning) return lastName; if (NDebugger.Instance.IsProcessRunning) return lastName;
Variable runtimeVar = RuntimeVariable; Variable runtimeVar = RuntimeVariable;
if (runtimeVar is NullRefVariable) return lastName; if (runtimeVar is NullRefVariable) return lastName;
Variable runtimeName = runtimeVar.SubVariables["m_Name"]; Variable runtimeName = runtimeVar.SubVariables["m_Name"];
@ -137,8 +137,8 @@ namespace DebuggerLibrary
get { get {
List<Function> callstack = new List<Function>(); List<Function> callstack = new List<Function>();
if (!NDebugger.IsDebugging) return callstack; if (!NDebugger.Instance.IsDebugging) return callstack;
if (NDebugger.IsProcessRunning) return callstack; if (NDebugger.Instance.IsProcessRunning) return callstack;
ICorDebugChainEnum corChainEnum; ICorDebugChainEnum corChainEnum;
corThread.EnumerateChains(out corChainEnum); corThread.EnumerateChains(out corChainEnum);
@ -177,7 +177,7 @@ namespace DebuggerLibrary
public Function CurrentFunction { public Function CurrentFunction {
get { get {
if (NDebugger.IsProcessRunning) throw new CurrentFunctionNotAviableException(); if (NDebugger.Instance.IsProcessRunning) throw new CurrentFunctionNotAviableException();
ICorDebugFrame corFrame; ICorDebugFrame corFrame;
corThread.GetActiveFrame(out corFrame); corThread.GetActiveFrame(out corFrame);
if (corFrame == null) { if (corFrame == null) {

8
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/Eval.cs

@ -32,7 +32,7 @@ namespace DebuggerLibrary
{ {
this.corFunction = corFunction; this.corFunction = corFunction;
this.args = args; this.args = args;
NDebugger.ManagedCallback.CorDebugEvalCompleted += new CorDebugEvalEventHandler(CorDebugEvalCompleted); NDebugger.Instance.ManagedCallback.CorDebugEvalCompleted += new CorDebugEvalEventHandler(CorDebugEvalCompleted);
} }
/// <summary> /// <summary>
@ -53,15 +53,15 @@ namespace DebuggerLibrary
/// </summary> /// </summary>
public void AsyncPerformEval() public void AsyncPerformEval()
{ {
if (NDebugger.IsProcessRunning) { if (NDebugger.Instance.IsProcessRunning) {
throw new DebuggerException("Debugger must be paused"); throw new DebuggerException("Debugger must be paused");
} }
NDebugger.CurrentThread.CorThread.CreateEval(out corEval); NDebugger.Instance.CurrentThread.CorThread.CreateEval(out corEval);
corEval.CallFunction(corFunction, (uint)args.Length, args); corEval.CallFunction(corFunction, (uint)args.Length, args);
NDebugger.Continue(); NDebugger.Instance.Continue();
} }
public ICorDebugValue GetResult() public ICorDebugValue GetResult()

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

@ -32,7 +32,7 @@ namespace DebuggerLibrary
static public void PerformNextEval() static public void PerformNextEval()
{ {
if (NDebugger.IsProcessRunning) { if (NDebugger.Instance.IsProcessRunning) {
return; return;
} }
if (waitingEvals.Count == 0) { if (waitingEvals.Count == 0) {

Loading…
Cancel
Save