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.
--- a/src/version.c
+++ b/src/version.c
@@ -767,6 +767,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1599,
+/**/
     1598,
 /**/
     1597,