Add mapping for Focus, and make focusing a stack frame focus the thread
This commit is contained in:
parent
82307ff1ba
commit
a9d0ebde0b
3 changed files with 45 additions and 11 deletions
27
README.md
27
README.md
|
|
@ -751,6 +751,9 @@ Scopes and variables are represented by the buffer `vimspector.Variables`.
|
||||||
|
|
||||||
## Watches
|
## Watches
|
||||||
|
|
||||||
|
The watch window is used to inspect variables and expressions. Expressions are
|
||||||
|
evaluated in the selected stack frame which is "focussed"
|
||||||
|
|
||||||
The watches window is a prompt buffer, where that's available. Enter insert mode
|
The watches window is a prompt buffer, where that's available. Enter insert mode
|
||||||
to add a new watch expression.
|
to add a new watch expression.
|
||||||
|
|
||||||
|
|
@ -767,7 +770,7 @@ The watches are represented by the buffer `vimspector.StackTrace`.
|
||||||
|
|
||||||
### Watch autocompletion
|
### Watch autocompletion
|
||||||
|
|
||||||
The watch prompt buffer has its `omnifunc` set to a function that will
|
The watch prompt buffer has its `omnifunc` set to a function that will
|
||||||
calcualte completion for the current expression. This is trivailly used with
|
calcualte completion for the current expression. This is trivailly used with
|
||||||
`<Ctrl-x><Ctrl-o>` (see `:help ins-completion`), or integrated with your
|
`<Ctrl-x><Ctrl-o>` (see `:help ins-completion`), or integrated with your
|
||||||
favourite completion system. The filetype in the buffer is set to
|
favourite completion system. The filetype in the buffer is set to
|
||||||
|
|
@ -783,8 +786,28 @@ let g:ycm_semantic_triggers = {
|
||||||
|
|
||||||
## Stack Traces
|
## Stack Traces
|
||||||
|
|
||||||
* In the threads window, use `<CR>`, or double-click with left mouse to expand/collapse.
|
The stack trace window shows the state of each progream thread. Threads which
|
||||||
|
are stopped can be expanded to show the strack trace of that thread.
|
||||||
|
|
||||||
|
Often, but not always, all threads are stopped when a breakpoint is hit. The
|
||||||
|
status of a thread is show in parentheses after the thread's name. Where
|
||||||
|
supported by the underlying debugger, threads can be paused and continued
|
||||||
|
individually from within the Stack Trace window.
|
||||||
|
|
||||||
|
A particular thread, highlighted with the `CursorLine` highlight group is the
|
||||||
|
"focussed" thread. This is the thread that receives commands like "Stop In",
|
||||||
|
"Stop Out", "Continue" and "Pause" in the code window. The focussed thread can
|
||||||
|
be changed manually to "switch to" that thread.
|
||||||
|
|
||||||
|
* Use `<CR>`, or double-click with left mouse to expand/collapse a thread stack
|
||||||
|
trace, or use the WinBar button.
|
||||||
* Use `<CR>`, or double-click with left mouse on a stack frame to jump to it.
|
* Use `<CR>`, or double-click with left mouse on a stack frame to jump to it.
|
||||||
|
* Use the WinBar or `vimspector#PauseContinueThread()` to individually pause or
|
||||||
|
continue the selected thread.
|
||||||
|
* Use the "Focus" WinBar button, `<leader><CR>` or `vimspector#SetCurrentThread()`
|
||||||
|
to set the "focussed" thread to the currently selected one. If the selected
|
||||||
|
line is a stack frame, set the focussed thread to the thread of that frame and
|
||||||
|
jump to that frame in the code window.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,8 @@ class StackTraceView( object ):
|
||||||
with utils.LetCurrentWindow( win ):
|
with utils.LetCurrentWindow( win ):
|
||||||
vim.command( 'nnoremap <silent> <buffer> <CR> '
|
vim.command( 'nnoremap <silent> <buffer> <CR> '
|
||||||
':<C-U>call vimspector#GoToFrame()<CR>' )
|
':<C-U>call vimspector#GoToFrame()<CR>' )
|
||||||
|
vim.command( 'nnoremap <silent> <buffer> <leader><CR> '
|
||||||
|
':<C-U>call vimspector#SetCurrentThread()<CR>' )
|
||||||
vim.command( 'nnoremap <silent> <buffer> <2-LeftMouse> '
|
vim.command( 'nnoremap <silent> <buffer> <2-LeftMouse> '
|
||||||
':<C-U>call vimspector#GoToFrame()<CR>' )
|
':<C-U>call vimspector#GoToFrame()<CR>' )
|
||||||
|
|
||||||
|
|
@ -320,16 +322,22 @@ class StackTraceView( object ):
|
||||||
thread = self._GetSelectedThread()
|
thread = self._GetSelectedThread()
|
||||||
return thread.id if thread else thread
|
return thread.id if thread else thread
|
||||||
|
|
||||||
|
def _SetCurrentThread( self, thread: Thread ):
|
||||||
|
self._current_thread = thread.id
|
||||||
|
self._DrawThreads()
|
||||||
|
|
||||||
def SetCurrentThread( self ):
|
def SetCurrentThread( self ):
|
||||||
thread = self._GetSelectedThread()
|
thread = self._GetSelectedThread()
|
||||||
if not thread:
|
if thread:
|
||||||
utils.UserMessage( "No thread selected" )
|
self._SetCurrentThread( thread )
|
||||||
|
elif vim.current.buffer != self._buf:
|
||||||
|
return
|
||||||
|
elif vim.current.window.cursor[ 0 ] in self._line_to_frame:
|
||||||
|
thread, frame = self._line_to_frame[ vim.current.window.cursor[ 0 ] ]
|
||||||
|
self._SetCurrentThread( thread )
|
||||||
|
self._JumpToFrame( frame )
|
||||||
else:
|
else:
|
||||||
self._current_thread = thread.id
|
utils.UserMessage( "No thread selected" )
|
||||||
|
|
||||||
self._DrawThreads()
|
|
||||||
|
|
||||||
|
|
||||||
def ExpandFrameOrThread( self ):
|
def ExpandFrameOrThread( self ):
|
||||||
thread = self._GetSelectedThread()
|
thread = self._GetSelectedThread()
|
||||||
|
|
@ -345,12 +353,15 @@ class StackTraceView( object ):
|
||||||
elif vim.current.buffer != self._buf:
|
elif vim.current.buffer != self._buf:
|
||||||
return
|
return
|
||||||
elif vim.current.window.cursor[ 0 ] in self._line_to_frame:
|
elif vim.current.window.cursor[ 0 ] in self._line_to_frame:
|
||||||
self._JumpToFrame( self._line_to_frame[ vim.current.window.cursor[ 0 ] ] )
|
thread, frame = self._line_to_frame[ vim.current.window.cursor[ 0 ] ]
|
||||||
|
self._JumpToFrame( frame )
|
||||||
|
|
||||||
|
|
||||||
def _JumpToFrame( self, frame, reason = '' ):
|
def _JumpToFrame( self, frame, reason = '' ):
|
||||||
def do_jump():
|
def do_jump():
|
||||||
if 'line' in frame and frame[ 'line' ] > 0:
|
if 'line' in frame and frame[ 'line' ] > 0:
|
||||||
|
# Should this set the current _Thread_ too ? If i jump to a frame in
|
||||||
|
# Thread 2, should that become the focussed thread ?
|
||||||
self._current_frame = frame
|
self._current_frame = frame
|
||||||
return self._session.SetCurrentFrame( self._current_frame, reason )
|
return self._session.SetCurrentFrame( self._current_frame, reason )
|
||||||
return False
|
return False
|
||||||
|
|
@ -469,7 +480,7 @@ class StackTraceView( object ):
|
||||||
source[ 'name' ],
|
source[ 'name' ],
|
||||||
frame[ 'line' ] ) )
|
frame[ 'line' ] ) )
|
||||||
|
|
||||||
self._line_to_frame[ line ] = frame
|
self._line_to_frame[ line ] = ( thread, frame )
|
||||||
|
|
||||||
def _ResolveSource( self, source, and_then ):
|
def _ResolveSource( self, source, and_then ):
|
||||||
source_reference = int( source[ 'sourceReference' ] )
|
source_reference = int( source[ 'sourceReference' ] )
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ var msg = 'Hello, world!'
|
||||||
var obj = {
|
var obj = {
|
||||||
test: 'testing',
|
test: 'testing',
|
||||||
toast: function() {
|
toast: function() {
|
||||||
return 'toasty' . this.test;
|
return 'toasty' + this.test;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue