From f0785c11f22ca997497c050dbf1cdb1be20e5be2 Mon Sep 17 00:00:00 2001 From: Ben Jackson Date: Fri, 20 Nov 2020 23:18:20 +0000 Subject: [PATCH] Allow pausing individual threads (in theory) --- autoload/vimspector.vim | 7 +++++++ python3/vimspector/debug_session.py | 14 ++++++++++++++ python3/vimspector/stack_trace.py | 21 ++++++++++++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/autoload/vimspector.vim b/autoload/vimspector.vim index 6509e14..468421f 100644 --- a/autoload/vimspector.vim +++ b/autoload/vimspector.vim @@ -171,6 +171,13 @@ function! vimspector#Pause() abort py3 _vimspector_session.Pause() endfunction +function! vimspector#PauseThread() abort + if !s:Enabled() + return + endif + py3 _vimspector_session.PauseThread() +endfunction + function! vimspector#Stop() abort if !s:Enabled() return diff --git a/python3/vimspector/debug_session.py b/python3/vimspector/debug_session.py index 85240df..fc2837e 100644 --- a/python3/vimspector/debug_session.py +++ b/python3/vimspector/debug_session.py @@ -491,6 +491,20 @@ class DebugSession( object ): }, } ) + @IfConnected() + def PauseThread( self ): + threadId = self._stackTraceView.GetSelectedThreadId() + if threadId is None: + utils.UserMessage( 'No thread selected' ) + return + + self._connection.DoRequest( None, { + 'command': 'pause', + 'arguments': { + 'threadId': threadId, + }, + } ) + @IfConnected() def ExpandVariable( self ): self._variablesView.ExpandVariable() diff --git a/python3/vimspector/stack_trace.py b/python3/vimspector/stack_trace.py index e5620ee..2fd761b 100644 --- a/python3/vimspector/stack_trace.py +++ b/python3/vimspector/stack_trace.py @@ -109,6 +109,13 @@ class StackTraceView( object ): vim.command( 'nnoremap <2-LeftMouse> ' ':call vimspector#GoToFrame()' ) + if utils.UseWinBar(): + vim.command( 'nnoremenu 1.2 WinBar.Open ' + ':call vimspector#GoToFrame()' ) + vim.command( 'nnoremenu 1.1 WinBar.Pause ' + ':call vimspector#PauseThread()' ) + + self._line_to_frame = {} self._line_to_thread = {} @@ -264,10 +271,22 @@ class StackTraceView( object ): self._connection.DoRequest( consume_stacktrace, { 'command': 'stackTrace', 'arguments': { - 'threadId': thread.thread[ 'id' ], + 'threadId': thread.id, } } ) + + def GetSelectedThreadId( self ): + if vim.current.buffer != self._buf: + return None + + thread = self._line_to_thread.get( vim.current.window.cursor[ 0 ] ) + if not thread: + return None + + return thread.id + + def ExpandFrameOrThread( self ): if vim.current.buffer != self._buf: return