clear debug panel trees on debugger continue

This commit is contained in:
Matt Parker
2025-12-14 19:11:55 +10:00
parent c122af1e92
commit 5eac3ce445
3 changed files with 10 additions and 3 deletions

View File

@@ -171,24 +171,28 @@ public class DebuggingService
{ {
await Task.CompletedTask.ConfigureAwait(ConfigureAwaitOptions.ForceYielding); await Task.CompletedTask.ConfigureAwait(ConfigureAwaitOptions.ForceYielding);
var nextRequest = new NextRequest(threadId); var nextRequest = new NextRequest(threadId);
GlobalEvents.Instance.DebuggerExecutionContinued.InvokeParallelFireAndForget();
_debugProtocolHost.SendRequestSync(nextRequest); _debugProtocolHost.SendRequestSync(nextRequest);
} }
public async Task StepInto(int threadId, CancellationToken cancellationToken) public async Task StepInto(int threadId, CancellationToken cancellationToken)
{ {
await Task.CompletedTask.ConfigureAwait(ConfigureAwaitOptions.ForceYielding); await Task.CompletedTask.ConfigureAwait(ConfigureAwaitOptions.ForceYielding);
var stepInRequest = new StepInRequest(threadId); var stepInRequest = new StepInRequest(threadId);
GlobalEvents.Instance.DebuggerExecutionContinued.InvokeParallelFireAndForget();
_debugProtocolHost.SendRequestSync(stepInRequest); _debugProtocolHost.SendRequestSync(stepInRequest);
} }
public async Task StepOut(int threadId, CancellationToken cancellationToken) public async Task StepOut(int threadId, CancellationToken cancellationToken)
{ {
await Task.CompletedTask.ConfigureAwait(ConfigureAwaitOptions.ForceYielding); await Task.CompletedTask.ConfigureAwait(ConfigureAwaitOptions.ForceYielding);
var stepOutRequest = new StepOutRequest(threadId); var stepOutRequest = new StepOutRequest(threadId);
GlobalEvents.Instance.DebuggerExecutionContinued.InvokeParallelFireAndForget();
_debugProtocolHost.SendRequestSync(stepOutRequest); _debugProtocolHost.SendRequestSync(stepOutRequest);
} }
public async Task Continue(int threadId, CancellationToken cancellationToken) public async Task Continue(int threadId, CancellationToken cancellationToken)
{ {
await Task.CompletedTask.ConfigureAwait(ConfigureAwaitOptions.ForceYielding); await Task.CompletedTask.ConfigureAwait(ConfigureAwaitOptions.ForceYielding);
var continueRequest = new ContinueRequest(threadId); var continueRequest = new ContinueRequest(threadId);
GlobalEvents.Instance.DebuggerExecutionContinued.InvokeParallelFireAndForget();
_debugProtocolHost.SendRequestSync(continueRequest); _debugProtocolHost.SendRequestSync(continueRequest);
} }

View File

@@ -15,6 +15,7 @@ public class GlobalEvents
public EventWrapper<SharpIdeProjectModel, Task> ProjectStartedRunning { get; } = new(_ => Task.CompletedTask); public EventWrapper<SharpIdeProjectModel, Task> ProjectStartedRunning { get; } = new(_ => Task.CompletedTask);
public EventWrapper<SharpIdeProjectModel, Task> ProjectStoppedRunning { get; } = new(_ => Task.CompletedTask); public EventWrapper<SharpIdeProjectModel, Task> ProjectStoppedRunning { get; } = new(_ => Task.CompletedTask);
public EventWrapper<ExecutionStopInfo, Task> DebuggerExecutionStopped { get; } = new(_ => Task.CompletedTask); public EventWrapper<ExecutionStopInfo, Task> DebuggerExecutionStopped { get; } = new(_ => Task.CompletedTask);
public EventWrapper<Task> DebuggerExecutionContinued { get; } = new(() => Task.CompletedTask);
/// A document changed, project was reloaded etc. Document changes include unsaved changes in the IDE. /// A document changed, project was reloaded etc. Document changes include unsaved changes in the IDE.
public EventWrapper<Task> SolutionAltered { get; } = new(() => Task.CompletedTask); public EventWrapper<Task> SolutionAltered { get; } = new(() => Task.CompletedTask);

View File

@@ -27,10 +27,11 @@ public partial class ThreadsVariablesSubTab : Control
_stackFramesTree = GetNode<Tree>("%StackFramesTree"); _stackFramesTree = GetNode<Tree>("%StackFramesTree");
_variablesTree = GetNode<Tree>("%VariablesTree"); _variablesTree = GetNode<Tree>("%VariablesTree");
GlobalEvents.Instance.DebuggerExecutionStopped.Subscribe(OnDebuggerExecutionStopped); GlobalEvents.Instance.DebuggerExecutionStopped.Subscribe(OnDebuggerExecutionStopped);
GlobalEvents.Instance.DebuggerExecutionContinued.Subscribe(ClearAllTrees);
_threadsTree.ItemSelected += OnThreadSelected; _threadsTree.ItemSelected += OnThreadSelected;
_stackFramesTree.ItemSelected += OnStackFrameSelected; _stackFramesTree.ItemSelected += OnStackFrameSelected;
_variablesTree.ItemCollapsed += OnVariablesItemExpandedOrCollapsed; _variablesTree.ItemCollapsed += OnVariablesItemExpandedOrCollapsed;
Project.ProjectStoppedRunning.Subscribe(ProjectStoppedRunning); Project.ProjectStoppedRunning.Subscribe(ClearAllTrees);
} }
private void OnVariablesItemExpandedOrCollapsed(TreeItem item) private void OnVariablesItemExpandedOrCollapsed(TreeItem item)
@@ -64,10 +65,11 @@ public partial class ThreadsVariablesSubTab : Control
public override void _ExitTree() public override void _ExitTree()
{ {
GlobalEvents.Instance.DebuggerExecutionStopped.Unsubscribe(OnDebuggerExecutionStopped); GlobalEvents.Instance.DebuggerExecutionStopped.Unsubscribe(OnDebuggerExecutionStopped);
Project.ProjectStoppedRunning.Unsubscribe(ProjectStoppedRunning); GlobalEvents.Instance.DebuggerExecutionContinued.Unsubscribe(ClearAllTrees);
Project.ProjectStoppedRunning.Unsubscribe(ClearAllTrees);
} }
private async Task ProjectStoppedRunning() private async Task ClearAllTrees()
{ {
await this.InvokeAsync(() => await this.InvokeAsync(() =>
{ {