# HG changeset patch # User Christian Brabandt # Date 1529420407 -7200 # Node ID 1ce45478cbf1b5ef0207a0f96f40e5cc3c117f33 # Parent c9043bfbbbd794f64b3298db5994aea80109db76 patch 8.1.0080: can't see the breakpoint number in the terminal debugger commit https://github.com/vim/vim/commit/de1a83147a28d3db8f9fca415ffc8fa04218eac2 Author: Bram Moolenaar Date: Tue Jun 19 16:59:54 2018 +0200 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) diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt --- a/runtime/doc/terminal.txt +++ b/runtime/doc/terminal.txt @@ -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: > :help gui 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 -line where the debugger stopped is highlighted. You can now step through the -program. Let's use the mouse: click on the "Next" button in the window -toolbar. You will see the highlighting move as the debugger executes a line -of source code. +ex_cmds.c file. A red "1 " marker will appear in the signcolumn where the +breakpoint was set. The line where the debugger stopped is highlighted. You +can now step through the program. Let's use the mouse: click on the "Next" +button in the window toolbar. You will see the highlighting move as the +debugger executes a line of source code. 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 @@ -788,6 +788,13 @@ source code, a new window will be create happens if the buffer in the source code window has been modified and can't be 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 ~ *termdebug-variables* *:Evaluate* @@ -831,6 +838,13 @@ There is another, hidden, buffer, which gdb. The buffer name is "gdb communication". Do not delete this buffer, it 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 ~ diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -67,7 +67,7 @@ if !exists('termdebugger') endif 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 if &background == 'light' @@ -325,10 +325,6 @@ func s:StartDebugCommon(dict) " There can be only one. 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. call win_gotoid(s:sourcewin) call s:InstallCommands() @@ -345,6 +341,7 @@ func s:StartDebugCommon(dict) endif endif + " Contains breakpoints that have been placed, key is the number. let s:breakpoints = {} augroup TermDebug @@ -813,6 +810,16 @@ func s:HandleCursor(msg) call win_gotoid(wid) 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 " Will update the sign that shows the breakpoint func s:HandleNewBreakpoint(msg) @@ -820,6 +827,7 @@ func s:HandleNewBreakpoint(msg) if nr == 0 return endif + call s:CreateBreakpoint(nr) if has_key(s:breakpoints, nr) let entry = s:breakpoints[nr] @@ -839,7 +847,7 @@ func s:HandleNewBreakpoint(msg) endfunc 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 endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 80, +/**/ 79, /**/ 78,