Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Karlaš <david.karlas@xamarin.com>2016-06-07 14:40:02 +0300
committerDavid Karlaš <david.karlas@xamarin.com>2016-07-25 08:32:18 +0300
commit7826ec03c149c75ba943fd44a9f7d9bddfc3fd3b (patch)
treeee0c66024879512abbcc9730a5842809d1788b94 /main/src/addins/MonoDevelop.UnitTesting
parentfc374fc8f141b4ffc4d14410b6d94771c82f168d (diff)
[Debugger] Support for multiple sessions debugging at once
With this change MultiStartupItems in solution is actually respected and user can right-click on any project while already debugging some project and execute "Start Debugging Item" command and debug both projects at same time. Files changes: DebuggingService.cs: This is file with most changes... Bunch of static variables and methods had to move into SessionManager and `session` was changed into `sessions`. This is important because some session callbacks don't have `sender` argument by having methods on SessionManager object we can distinguish for which method that call back is and static fields weren't able to handle multiple sessions... currentSession field represents session that is currently paused and being inspected SetupSession and CleanUp methods were adjusted to handle setting up/cleaning up single session instead of everything... StopsQueue serves as way to let other processes run(as opposed to being paused) when 1st process hits breakpoint... So if 2nd process which is running also hits breakpoint, it doesn't interrupt user inspection of variable in 1st process(or any other use case that user has), but instead it stores this stop(breakpoint hit, exception catchpoint, stepping finished...) and when user who is interacting with 1st process presses Continue, StepOver... It Dequeues stop operation from queue and instantly switches to 2nd process view... ProjectOperations.cs: UnitTestService.cs: Extensions.cs: Before this commit CurrentRunOperation was overridden when new debug process was started if 2nd process finished before 1st it would signal that debugging is finished which in fact was not true since 1st process was still running, so MultipleAsyncOperation addresses this problem DebugComamnds.cs: I noticed that BuildAdnDebug command dines't do really what is says it does instead just starts debugging so I removed it(DebuggingService.IsDebuggingSupported is always true, otherwise we wouldn't get this far, in past Run without debugging was same command as Debug) GetRunTarget is now GetRunTargets so we can handle MultiStartupItems Changed few commands behaviours to allow "Start Debugging Item" when we are already debugging... SourceEditorView.cs: DebugValueWindow.cs: DebugValueTooltipProvider: StackTracePad.cs: ObjectValuePad.cs: DebugExecutionHandlerFactory.cs: DisassemblyView.cs: ImmediatePad.cs: All this files handle the fact that Session can finish but more sessions might be still executing so cleanup has to be limited to specific session. SourceEditorView.cs: Beside above comment also calling new method DebuggingService.GetBreakpointStatus, which handles all sessions instead of just 1. ThreadsPad.cs: Calls new method DebuggingService.GetProcesses() which combines processes from all sessions.
Diffstat (limited to 'main/src/addins/MonoDevelop.UnitTesting')
-rw-r--r--main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestService.cs2
1 files changed, 1 insertions, 1 deletions
diff --git a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestService.cs b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestService.cs
index 5223c31fac..9e3edc791d 100644
--- a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestService.cs
+++ b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestService.cs
@@ -154,7 +154,7 @@ namespace MonoDevelop.UnitTesting
OnTestSessionStarting (new TestSessionEventArgs { Session = session, Test = test });
if (checkCurrentRunOperation)
- IdeApp.ProjectOperations.CurrentRunOperation = session;
+ IdeApp.ProjectOperations.AddRunOperation (session);
try {
await session.Start ();