diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs index 8d5486607a..b6b4e73474 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs @@ -72,8 +72,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads { debuggerCore = debugger.DebuggerCore; - debuggerCore.IsDebuggingChanged += new EventHandler(DebuggerStateChanged); - debuggerCore.IsProcessRunningChanged += new EventHandler(DebuggerStateChanged); + debuggerCore.DebuggingPaused += new EventHandler(DebuggingPaused); + debuggerCore.DebuggingResumed += new EventHandler(DebuggingResumed); RefreshList(); } @@ -91,7 +91,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads } } - public void DebuggerStateChanged(object sender, DebuggerEventArgs e) + void DebuggingPaused(object sender, DebuggingPausedEventArgs e) + { + RefreshList(); + } + + void DebuggingResumed(object sender, DebuggerEventArgs e) { RefreshList(); } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs index 7ead7cbb12..c5f59496b7 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs @@ -74,8 +74,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads { debuggerCore = debugger.DebuggerCore; - debuggerCore.IsDebuggingChanged += new EventHandler(DebuggerStateChanged); - debuggerCore.IsProcessRunningChanged += new EventHandler(DebuggerStateChanged); + debugger.ExceptionHistoryModified += new EventHandler(ExceptionHistoryModified); RefreshList(); } @@ -117,7 +116,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads } } - public void DebuggerStateChanged(object sender, DebuggerEventArgs e) + void ExceptionHistoryModified(object sender, EventArgs e) { RefreshList(); } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs index c99a01a05c..5534ed88a7 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs @@ -81,7 +81,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads debuggerCore.ThreadStarted += new EventHandler(AddThread); debuggerCore.ThreadStateChanged += new EventHandler(RefreshThread); debuggerCore.ThreadExited += new EventHandler(RemoveThread); - debuggerCore.IsProcessRunningChanged += new EventHandler(DebuggerStateChanged); + debuggerCore.DebuggingPaused += new EventHandler(OnDebuggingPaused); RefreshList(); } @@ -102,6 +102,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads } } + void OnDebuggingPaused(object sender, DebuggingPausedEventArgs e) + { + RefreshList(); + } private void AddThread(object sender, ThreadEventArgs e) { @@ -138,11 +142,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads item.Remove(); } } - - public void DebuggerStateChanged(object sender, DebuggerEventArgs e) - { - RefreshList(); - } private void RefreshList() { diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs index 36c405ec9e..b60fcf6075 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs @@ -40,6 +40,15 @@ namespace ICSharpCode.SharpDevelop.Services bool serviceInitialized = false; List exceptionHistory = new List(); + + public event EventHandler ExceptionHistoryModified; + + protected virtual void OnExceptionHistoryModified() + { + if (ExceptionHistoryModified != null) { + ExceptionHistoryModified(this, EventArgs.Empty); + } + } public NDebugger DebuggerCore { get { @@ -238,11 +247,9 @@ namespace ICSharpCode.SharpDevelop.Services debugger.LogMessage += new EventHandler(LogMessage); debugger.ProcessStarted += new EventHandler(ProcessStarted); + debugger.ProcessExited += new EventHandler(ProcessExited); debugger.DebuggingPaused += new EventHandler(DebuggingPaused); debugger.DebuggingResumed += new EventHandler(DebuggingResumed); - debugger.ProcessExited += new EventHandler(ProcessExited); - debugger.IsDebuggingChanged += new EventHandler(OnIsDebuggingChanged); - debugger.IsProcessRunningChanged += new EventHandler(OnIsProcessRunningChanged); debugger.BreakpointStateChanged += delegate (object sender, BreakpointEventArgs e) { RestoreSharpdevelopBreakpoint(e.Breakpoint); @@ -313,6 +320,7 @@ namespace ICSharpCode.SharpDevelop.Services { if (debugger.Processes.Count == 1) { OnDebugStarted(EventArgs.Empty); + isDebuggingCache = true; } } @@ -321,17 +329,20 @@ namespace ICSharpCode.SharpDevelop.Services if (debugger.Processes.Count == 0) { exceptionHistory.Clear(); OnDebugStopped(EventArgs.Empty); + isDebuggingCache = false; } } void DebuggingPaused(object sender, DebuggingPausedEventArgs e) { + isProcessRunningCache = false; OnIsProcessRunningChanged(EventArgs.Empty); JumpToCurrentLine(); if (e.Reason == PausedReason.Exception) { exceptionHistory.Add(debugger.CurrentThread.CurrentException); + OnExceptionHistoryModified(); if (debugger.CurrentThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED && (debugger.CatchHandledExceptions == false)) { // Ignore the exception e.ResumeDebuggingAfterEvent(); @@ -359,6 +370,7 @@ namespace ICSharpCode.SharpDevelop.Services void DebuggingResumed(object sender, DebuggerEventArgs e) { + isProcessRunningCache = true; DebuggerService.RemoveCurrentLineMarker(); } @@ -370,19 +382,5 @@ namespace ICSharpCode.SharpDevelop.Services } DebuggerService.JumpToCurrentLine(nextStatement.SourceFullFilename, nextStatement.StartLine, nextStatement.StartColumn, nextStatement.EndLine, nextStatement.EndColumn); } - - void OnIsDebuggingChanged(object sender, DebuggerEventArgs e) - { - isDebuggingCache = debugger.IsDebugging; - isProcessRunningCache = debugger.IsProcessRunning; - } - - public void OnIsProcessRunningChanged(object sender, DebuggerEventArgs e) - { - isDebuggingCache = debugger.IsDebugging; - isProcessRunningCache = debugger.IsProcessRunning; - - ((DefaultWorkbench)WorkbenchSingleton.Workbench).Update(); - } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs index bf9cdcd205..202e3173a8 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs @@ -88,11 +88,11 @@ namespace DebuggerLibrary void ExitCallback_Paused(PausedReason reason) { - if (debugger.CurrentThread != null) { - debugger.CurrentThread.DeactivateAllSteppers(); + if (debugger.CurrentThread == null) { + throw new DebuggerException("You are not allowed to pause since CurrentThread is not set"); } + debugger.CurrentThread.DeactivateAllSteppers(); if (reason != PausedReason.EvalComplete) { - debugger.OnIsProcessRunningChanged(); debugger.OnDebuggingPaused(reason); } handlingCallback = false; diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs index da6924a6ba..ef82074628 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs @@ -94,9 +94,6 @@ namespace DebuggerLibrary ResetBreakpoints(); ClearThreads(); - - OnIsProcessRunningChanged(); - OnIsDebuggingChanged(); currentProcess = null; @@ -126,24 +123,6 @@ namespace DebuggerLibrary } - public event EventHandler DebuggingIsResuming; - - protected internal virtual void OnDebuggingIsResuming(ref bool abort) - { - if (DebuggingIsResuming != null) { - TraceMessage ("Debugger event: OnDebuggingIsResuming(" + abort.ToString() + ")"); - foreach(Delegate d in DebuggingIsResuming.GetInvocationList()) { - DebuggingIsResumingEventArgs eventHandler = new DebuggingIsResumingEventArgs(this); - d.DynamicInvoke(new object[] {this, eventHandler}); - if (eventHandler.Abort == true) { - abort = true; - break; - } - } - } - } - - public event EventHandler DebuggingResumed; protected internal virtual void OnDebuggingResumed() @@ -154,28 +133,6 @@ namespace DebuggerLibrary } } - - public event EventHandler IsProcessRunningChanged; - - protected internal virtual void OnIsProcessRunningChanged() - { - TraceMessage ("Debugger event: OnIsProcessRunningChanged()"); - if (IsProcessRunningChanged != null) { - IsProcessRunningChanged(this, new DebuggerEventArgs(this)); - } - } - - - public event EventHandler IsDebuggingChanged; - - protected internal virtual void OnIsDebuggingChanged() - { - TraceMessage ("Debugger event: OnIsDebuggingChanged()"); - if (IsDebuggingChanged != null) { - IsDebuggingChanged(this, new DebuggerEventArgs(this)); - } - } - /// /// Fired when System.Diagnostics.Trace.WriteLine() is called in debuged process /// @@ -224,12 +181,9 @@ namespace DebuggerLibrary { Process process = Process.CreateProcess(this, filename, workingDirectory, arguments); AddProcess(process); - OnIsDebuggingChanged(); - OnIsProcessRunningChanged(); } - #endregion public void ToggleBreakpointAt(string fileName, int line, int column) diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs index 1f1ffbfd26..0f33b87828 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs @@ -128,7 +128,6 @@ namespace DebuggerLibrary isProcessRunning = false; debugger.OnDebuggingPaused(PausedReason.Break); - debugger.OnIsProcessRunningChanged(); } public void Continue() @@ -137,14 +136,9 @@ namespace DebuggerLibrary throw new DebuggerException("Invalid operation"); } - bool abort = false; - debugger.OnDebuggingIsResuming(ref abort); - if (abort == true) return; - isProcessRunning = true; if (debugger.ManagedCallback.HandlingCallback == false) { debugger.OnDebuggingResumed(); - debugger.OnIsProcessRunningChanged(); } corProcess.Continue(0); @@ -167,7 +161,7 @@ namespace DebuggerLibrary get { return isProcessRunning; } - set { + internal set { isProcessRunning = value; } }