- 
  Notifications
 You must be signed in to change notification settings 
- Fork 240
Add Breakpoint Label frame to optimize debug stepping performance #2190
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@SeeminglyScience @andyleejordan I made this a fairly minimal PR to be easy to review. Additional things I plan to do next as future incrementals
- Add start/end/column positioning to all stack frames (it's available in the position property, just has to be serialized properly)
- Separate variable and frame processing into independent resolution paths
- Implement "fast path" for local runspace sessions to use the runspace debugger properties and methods rather than going thru the pipeline to fetch the frame info, ~2-3ms vs 300ms-800ms
- Move all the scope/stack/variable resolution to a new async-based DebugStoppedContextclass that can be disposed and re-instantiated cleanly and kept separate from theDebugServiceconcerns, since LSP spec says no IDs/etc. should be reused between debug adapter stop/resumes
@SeeminglyScience @andyleejordan I made this a fairly minimal PR to be easy to review. Additional things I plan to do next as future incrementals
- Add start/end/column positioning to all stack frames (it's available in the position property, just has to be serialized properly)
- Separate variable and frame processing into independent resolution paths
- Implement "fast path" for local runspace sessions to use the runspace debugger properties and methods rather than going thru the pipeline to fetch the frame info, ~2-3ms vs 300ms-800ms
- Move all the scope/stack/variable resolution to a new async-based
DebugStoppedContextclass that can be disposed and re-instantiated cleanly and kept separate from theDebugServiceconcerns, since LSP spec says no IDs/etc. should be reused between debug adapter stop/resumes
I'm super excited for all of this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@SeeminglyScience and I are going to take a closer look at this just to be sure nothing got missed.
 
 
 src/PowerShellEditorServices/Services/DebugAdapter/Handlers/StackTraceHandler.cs
 
 Outdated
 
 Show resolved
 Hide resolved
 
 3fbc7b7 to
 cc2e2a1  
 Compare
 
 7e39f1d to
 a923a7d  
 Compare
 
 80b2351 to
 9ce8911  
 Compare
 
 cc2e2a1 to
 f052fa5  
 Compare
 
 This has been rebased to the latest prerelease and is good for re-review.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks Justin! Couple of questions and minor requests
 
 
 src/PowerShellEditorServices/Services/DebugAdapter/DebugService.cs
 
 Outdated
 
 Show resolved
 Hide resolved
 
  
 
 src/PowerShellEditorServices/Services/DebugAdapter/Handlers/StackTraceHandler.cs
 
 Outdated
 
 Show resolved
 Hide resolved
 
  
 
 src/PowerShellEditorServices/Services/DebugAdapter/Handlers/StackTraceHandler.cs
 
 Outdated
 
 Show resolved
 Hide resolved
 
 There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Loving this, we finally got to review through it. Just a couple changes requested and then we want to get into pre-release.
 
 
 src/PowerShellEditorServices/Services/DebugAdapter/Handlers/ScopesHandler.cs
 
 Outdated
 
 Show resolved
 Hide resolved
 
  
 
 src/PowerShellEditorServices/Services/DebugAdapter/Handlers/StackTraceHandler.cs
 
 Show resolved
 Hide resolved
 
  
 
 src/PowerShellEditorServices/Services/DebugAdapter/Handlers/StackTraceHandler.cs
 
 Show resolved
 Hide resolved
 
  
 
 src/PowerShellEditorServices/Services/DebugAdapter/Handlers/StackTraceHandler.cs
 
 Show resolved
 Hide resolved
 
  
 
 src/PowerShellEditorServices/Services/DebugAdapter/Handlers/StackTraceHandler.cs
 
 Show resolved
 Hide resolved
 
  
 
 src/PowerShellEditorServices/Services/DebugAdapter/Handlers/StackTraceHandler.cs
 
 Outdated
 
 Show resolved
 Hide resolved
 
  
 
 src/PowerShellEditorServices/Services/DebugAdapter/Handlers/StackTraceHandler.cs
 
 Outdated
 
 Show resolved
 Hide resolved
 
 There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot reviewed 5 out of 5 changed files in this pull request and generated no suggestions.
@andyleejordan @SeeminglyScience your opinions have officially been deemed irrelevant by our AI overlords, please approve as is /s
image 
939e2c4 to
 84b55f8  
 Compare
 
 Co-authored-by: Patrick Meinecke <SeeminglyScience@users.noreply.github.com>
47a2634 to
 9414af6  
 Compare
 
 9414af6 to
 414599f  
 Compare
 
 All feedback should be addressed. I also removed some of the TraceOutput log stuff I was experimenting with, I'm going to submit a separate test-specific PR to revamp the DAP E2E tests.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
YOLO, I mean I love it and it's been thoroughly reviewed. Thanks Justin! Excited to get this out.
So it can merge.
@andyleejordan this wording sounded so unnecessarily passive aggressive, LOL
image 
Thanks! Excited to speed this up, it's annoyed me for YEARS.
Uh oh!
There was an error while loading. Please reload this page.
PR Summary
Implements DAP
DelayedStackTraceLoadingand returns an artificial breakpoint label frame based on the invocation info ASAP once the debugger stops. The rest of the stack trace is then returned on a future request that doesn't block the client UI.Capture.mp4
PR Context
Debug stepping takes 300ms+ due to waiting for stack trace collection via the slow
Get-PSCallStack"hack". Further improvements will come around this later.