# HG changeset patch # User Christian Brabandt # Date 1523725207 -7200 # Node ID fc660a6ef37da75f002ef1e567803dc451400804 # Parent cea7c555bd3e4bc598a0c20a426099949fa08ad7 patch 8.0.1713: terminal debugger doesn't handle arguments commit https://github.com/vim/vim/commit/b3623a382abc8f8e2bcfba4c1a2aa06b7578eb8d Author: Bram Moolenaar Date: Sat Apr 14 18:59:50 2018 +0200 patch 8.0.1713: terminal debugger doesn't handle arguments Problem: Terminal debugger doesn't handle arguments. Solution: Use and pass all the arguments to gdb, e.g. the core file or process number. (suggested by Christian Brabandt) Disallow starting the debugger twice. diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt --- a/runtime/doc/terminal.txt +++ b/runtime/doc/terminal.txt @@ -649,6 +649,13 @@ the same as any command running in a ter 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* 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 @@ -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() +command -nargs=* -complete=file Termdebug call s:StartDebug() " Name of the gdb command, defaults to "gdb". if !exists('termdebugger') @@ -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 @@ -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'), @@ -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' @@ -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()) @@ -295,6 +301,7 @@ func s:DeleteCommands() delcommand Evaluate delcommand Gdb delcommand Program + delcommand Source delcommand Winbar nunmap K diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -763,6 +763,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1713, +/**/ 1712, /**/ 1711,