Mercurial > vim
changeset 13450:a7a88403ccb1 v8.0.1599
patch 8.0.1599: no error message when gdb does not support debugger
commit https://github.com/vim/vim/commit/3e4b84d0b55936ac017d20df6651ddd05e38f58f
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Mar 11 20:51:52 2018 +0100
patch 8.0.1599: no error message when gdb does not support debugger
Problem: No error message when gdb does not support the terminal debugger.
Solution: Check for the response to open the Machine Interface.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 11 Mar 2018 21:00:08 +0100 |
parents | ab94650bc5ca |
children | be0536e2f27f |
files | runtime/pack/dist/opt/termdebug/plugin/termdebug.vim src/version.c |
diffstat | 2 files changed, 33 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -105,9 +105,39 @@ func s:StartDebug(cmd) let s:gdbwin = win_getid(winnr()) " Connect gdb to the communication pty, using the GDB/MI interface - " If you get an error "undefined command" your GDB is too old. call term_sendkeys(s:gdbbuf, 'new-ui mi ' . commpty . "\r") + " Wait for the response to show up, users may not notice the error and wonder + " why the debugger doesn't work. + let try_count = 0 + while 1 + let response = '' + for lnum in range(1,20) + if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi ' + let response = term_getline(s:gdbbuf, lnum + 1) + if response =~ 'Undefined command' + echoerr 'Your gdb does not support the Machine Interface feature' + exe 'bwipe! ' . s:ptybuf + exe 'bwipe! ' . s:commbuf + return + endif + if response =~ 'New UI allocated' + " Success! + break + endif + endif + endfor + if response =~ 'New UI allocated' + break + endif + let try_count += 1 + if try_count > 100 + echoerr 'Cannot check if your gdb works, continuing anyway' + break + endif + sleep 10m + endwhile + " Interpret commands while the target is running. This should usualy only be " exec-interrupt, since many commands don't work properly while the target is " running.