Skip to content

Commit

Permalink
patch 8.0.1713: terminal debugger doesn't handle arguments
Browse files Browse the repository at this point in the history
Problem:    Terminal debugger doesn't handle arguments.
Solution:   Use <f-args> and pass all the arguments to gdb, e.g. the core file
            or process number. (suggested by Christian Brabandt) Disallow
            starting the debugger twice.
  • Loading branch information
brammool committed Apr 14, 2018
1 parent 8c041b6 commit b3623a3
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 4 deletions.
7 changes: 7 additions & 0 deletions runtime/doc/terminal.txt
Original file line number Diff line number Diff line change
Expand Up @@ -649,6 +649,13 @@ the same as any command running in a terminal window.
When the debugger ends, typically by typing "quit" in the gdb window, the two
opened windows are closed.

Only one debugger can be active at a time.

To attach gdb to an already running executable, or use a core file, pass extra
arguments. E.g.: >
:Termdebug vim core
:Termdebug vim 98343
Example session ~
*termdebug-example*
Expand Down
15 changes: 11 additions & 4 deletions runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ endif

" The command that starts debugging, e.g. ":Termdebug vim".
" To end type "quit" in the gdb window.
command -nargs=* -complete=file Termdebug call s:StartDebug(<q-args>)
command -nargs=* -complete=file Termdebug call s:StartDebug(<f-args>)

" Name of the gdb command, defaults to "gdb".
if !exists('termdebugger')
Expand All @@ -43,7 +43,12 @@ else
endif
hi default debugBreakpoint term=reverse ctermbg=red guibg=red

func s:StartDebug(cmd)
func s:StartDebug(...)
if exists('s:gdbwin')
echoerr 'Terminal debugger already running'
return
endif

let s:startwin = win_getid(winnr())
let s:startsigncolumn = &signcolumn

Expand Down Expand Up @@ -90,7 +95,7 @@ func s:StartDebug(cmd)

" Open a terminal window to run the debugger.
" Add -quiet to avoid the intro message causing a hit-enter prompt.
let cmd = [g:termdebugger, '-quiet', '-tty', pty, a:cmd]
let cmd = [g:termdebugger, '-quiet', '-tty', pty] + a:000
echomsg 'executing "' . join(cmd) . '"'
let s:gdbbuf = term_start(cmd, {
\ 'exit_cb': function('s:EndDebug'),
Expand All @@ -112,7 +117,7 @@ func s:StartDebug(cmd)
let try_count = 0
while 1
let response = ''
for lnum in range(1,20)
for lnum in range(1,200)
if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi '
let response = term_getline(s:gdbbuf, lnum + 1)
if response =~ 'Undefined command'
Expand Down Expand Up @@ -182,6 +187,7 @@ endfunc
func s:EndDebug(job, status)
exe 'bwipe! ' . s:ptybuf
exe 'bwipe! ' . s:commbuf
unlet s:gdbwin

let curwinid = win_getid(winnr())

Expand Down Expand Up @@ -295,6 +301,7 @@ func s:DeleteCommands()
delcommand Evaluate
delcommand Gdb
delcommand Program
delcommand Source
delcommand Winbar

nunmap K
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -762,6 +762,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1713,
/**/
1712,
/**/
Expand Down

0 comments on commit b3623a3

Please sign in to comment.