diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-12-22 15:14:49 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-12-22 15:14:49 +0100 |
commit | ef3c6a5b023723a5f6eec47328cf7139c2048f8c (patch) | |
tree | 89cb2ea2cf9859d71c2da3b16ff7c15801031c2f | |
parent | 3ac55c86449de57f63fa1cc2ac19202c1aa1ebb9 (diff) | |
download | vim-git-ef3c6a5b023723a5f6eec47328cf7139c2048f8c.tar.gz |
patch 8.1.0621: terminal debugger does not handle unexpected debugger exitv8.1.0621
Problem: Terminal debugger does not handle unexpected debugger exit.
Solution: Check for debugger job ended and close unused buffers. (Damien)
-rw-r--r-- | runtime/pack/dist/opt/termdebug/plugin/termdebug.vim | 22 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 19 insertions, 5 deletions
diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim index df89abd7a..846897004 100644 --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -142,6 +142,13 @@ func s:StartDebug_internal(dict) endif endfunc +" Use when debugger didn't start or ended. +func s:CloseBuffers() + exe 'bwipe! ' . s:ptybuf + exe 'bwipe! ' . s:commbuf + unlet! s:gdbwin +endfunc + func s:StartDebug_term(dict) " Open a terminal window without a job, to run the debugged program in. let s:ptybuf = term_start('NONE', { @@ -181,13 +188,11 @@ func s:StartDebug_term(dict) let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args call ch_log('executing "' . join(cmd) . '"') let s:gdbbuf = term_start(cmd, { - \ 'exit_cb': function('s:EndTermDebug'), \ 'term_finish': 'close', \ }) if s:gdbbuf == 0 echoerr 'Failed to open the gdb terminal window' - exe 'bwipe! ' . s:ptybuf - exe 'bwipe! ' . s:commbuf + call s:CloseBuffers() return endif let s:gdbwin = win_getid(winnr()) @@ -204,6 +209,13 @@ func s:StartDebug_term(dict) " why the debugger doesn't work. let try_count = 0 while 1 + let gdbproc = term_getjob(s:gdbbuf) + if gdbproc == v:null || job_status(gdbproc) !=# 'run' + echoerr string(g:termdebugger) . ' exited unexpectedly' + call s:CloseBuffers() + return + endif + let response = '' for lnum in range(1,200) if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi ' @@ -211,8 +223,7 @@ func s:StartDebug_term(dict) let response = term_getline(s:gdbbuf, lnum) . term_getline(s:gdbbuf, lnum + 1) if response =~ 'Undefined command' echoerr 'Sorry, your gdb is too old, gdb 7.12 is required' - exe 'bwipe! ' . s:ptybuf - exe 'bwipe! ' . s:commbuf + call s:CloseBuffers() return endif if response =~ 'New UI allocated' @@ -243,6 +254,7 @@ func s:StartDebug_term(dict) " "Type <return> to continue" prompt. call s:SendCommand('set pagination off') + call job_setoptions(gdbproc, {'exit_cb': function('s:EndTermDebug')}) call s:StartDebugCommon(a:dict) endfunc diff --git a/src/version.c b/src/version.c index 333a98fc3..40c3c5a2f 100644 --- a/src/version.c +++ b/src/version.c @@ -800,6 +800,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 621, +/**/ 620, /**/ 619, |