summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-12-22 15:14:49 +0100
committerBram Moolenaar <Bram@vim.org>2018-12-22 15:14:49 +0100
commitef3c6a5b023723a5f6eec47328cf7139c2048f8c (patch)
tree89cb2ea2cf9859d71c2da3b16ff7c15801031c2f
parent3ac55c86449de57f63fa1cc2ac19202c1aa1ebb9 (diff)
downloadvim-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.vim22
-rw-r--r--src/version.c2
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,