0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.1.0080: can't see the breakpoint number in the terminal debugger

Problem:    Can't see the breakpoint number in the terminal debugger.
Solution:   Use the breakpoint number for the sign. (Christian Brabandt)
This commit is contained in:
Bram Moolenaar 2018-06-19 16:59:54 +02:00
parent 8df6e5d467
commit de1a83147a
3 changed files with 35 additions and 11 deletions

View File

@ -705,11 +705,11 @@ Put focus on the gdb window and type: >
Vim will start running in the program window. Put focus there and type: > Vim will start running in the program window. Put focus there and type: >
:help gui :help gui
Gdb will run into the ex_help breakpoint. The source window now shows the Gdb will run into the ex_help breakpoint. The source window now shows the
ex_cmds.c file. A ">>" marker will appear where the breakpoint was set. The ex_cmds.c file. A red "1 " marker will appear in the signcolumn where the
line where the debugger stopped is highlighted. You can now step through the breakpoint was set. The line where the debugger stopped is highlighted. You
program. Let's use the mouse: click on the "Next" button in the window can now step through the program. Let's use the mouse: click on the "Next"
toolbar. You will see the highlighting move as the debugger executes a line button in the window toolbar. You will see the highlighting move as the
of source code. debugger executes a line of source code.
Click "Next" a few times until the for loop is highlighted. Put the cursor on Click "Next" a few times until the for loop is highlighted. Put the cursor on
the end of "eap->arg", then click "Eval" in the toolbar. You will see this the end of "eap->arg", then click "Eval" in the toolbar. You will see this
@ -788,6 +788,13 @@ source code, a new window will be created for the source code. This also
happens if the buffer in the source code window has been modified and can't be happens if the buffer in the source code window has been modified and can't be
abandoned. abandoned.
Gdb gives each breakpoint a number. In Vim the number shows up in the sign
column, with a red background. You can use these gdb commands:
- info break list breakpoints
- delete N delete breakpoint N
You can also use the `:Clear` command if the cursor is in the line with the
breakpoint, or use the "Clear breakpoint" right-click menu entry.
Inspecting variables ~ Inspecting variables ~
*termdebug-variables* *:Evaluate* *termdebug-variables* *:Evaluate*
@ -831,6 +838,13 @@ There is another, hidden, buffer, which is used for Vim to communicate with
gdb. The buffer name is "gdb communication". Do not delete this buffer, it gdb. The buffer name is "gdb communication". Do not delete this buffer, it
will break the debugger. will break the debugger.
Gdb has some weird behavior, the plugin does its best to work around that.
For example, after typing "continue" in the gdb window a CTRL-C can be used to
interrupt the running program. But after using the MI command
"-exec-continue" pressing CTRL-C does not interrupt. Therefore you will see
"continue" being used for the `:Continue` command, instead of using the
communication channel.
Customizing ~ Customizing ~

View File

@ -67,7 +67,7 @@ if !exists('termdebugger')
endif endif
let s:pc_id = 12 let s:pc_id = 12
let s:break_id = 13 let s:break_id = 13 " breakpoint number is added to this
let s:stopped = 1 let s:stopped = 1
if &background == 'light' if &background == 'light'
@ -325,10 +325,6 @@ func s:StartDebugCommon(dict)
" There can be only one. " There can be only one.
sign define debugPC linehl=debugPC sign define debugPC linehl=debugPC
" Sign used to indicate a breakpoint.
" Can be used multiple times.
sign define debugBreakpoint text=>> texthl=debugBreakpoint
" Install debugger commands in the text window. " Install debugger commands in the text window.
call win_gotoid(s:sourcewin) call win_gotoid(s:sourcewin)
call s:InstallCommands() call s:InstallCommands()
@ -345,6 +341,7 @@ func s:StartDebugCommon(dict)
endif endif
endif endif
" Contains breakpoints that have been placed, key is the number.
let s:breakpoints = {} let s:breakpoints = {}
augroup TermDebug augroup TermDebug
@ -813,6 +810,16 @@ func s:HandleCursor(msg)
call win_gotoid(wid) call win_gotoid(wid)
endfunc endfunc
func s:CreateBreakpoint(nr)
if !exists("s:BreakpointSigns")
let s:BreakpointSigns = []
endif
if index(s:BreakpointSigns, a:nr) == -1
call add(s:BreakpointSigns, a:nr)
exe "sign define debugBreakpoint". a:nr . " text=" . a:nr . " texthl=debugBreakpoint"
endif
endfunc
" Handle setting a breakpoint " Handle setting a breakpoint
" Will update the sign that shows the breakpoint " Will update the sign that shows the breakpoint
func s:HandleNewBreakpoint(msg) func s:HandleNewBreakpoint(msg)
@ -820,6 +827,7 @@ func s:HandleNewBreakpoint(msg)
if nr == 0 if nr == 0
return return
endif endif
call s:CreateBreakpoint(nr)
if has_key(s:breakpoints, nr) if has_key(s:breakpoints, nr)
let entry = s:breakpoints[nr] let entry = s:breakpoints[nr]
@ -839,7 +847,7 @@ func s:HandleNewBreakpoint(msg)
endfunc endfunc
func s:PlaceSign(nr, entry) func s:PlaceSign(nr, entry)
exe 'sign place ' . (s:break_id + a:nr) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint file=' . a:entry['fname'] exe 'sign place ' . (s:break_id + a:nr) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . a:nr . ' file=' . a:entry['fname']
let a:entry['placed'] = 1 let a:entry['placed'] = 1
endfunc endfunc

View File

@ -761,6 +761,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
80,
/**/ /**/
79, 79,
/**/ /**/