This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFC: MI output during program execution


I've read most of the discussion through the archives.  I find the idea of
notifying the frontend about all changes of state a laudable goal but
currently too difficult (for me).  However, I would still like GDB to
convey to the frontend when the inferior is running.  Jim's point about the
"define" command shoots down the patch that I sent earlier so I would like to
suggest another approach.  I would like to take the "^running" and "*stopped"
tokens out of mi-main.c and put them in infrun.c where annotate_starting and
annotate_stopped are respectively called.  This seems more in line with the
idea of notification and works when I test it natively on GNU/Linux.  I am
sure that it will fail somewhere else (remote targets?) otherwise this
approach would have surely been used in the first place.

With this method user-defined commands work as for simple GDB commands.  CLI
commands don't give full MI output but information like the current line can
be obtained by polling with -stack-info-frame.

-exec-next
^running
(gdb) 
*stopped,reason="end-stepping-range",thread-id="0",frame={addr="0x080484ef",func="main",args=[{name="argc",value="1"},{name="argv",value="0xbffff794"}],file="myprog.c",fullname="/home/nick/myprog.c",line="46"}
(gdb) 
n
&"n\n"
^running
(gdb) 
~"47\t  int n1=7, n2=8, n3=9;\n"
*stopped
^done
(gdb) 

Using strcmp (interpreter_p, "mi") and not strncmp (interpreter_p, "mi", 2)
means that this should only change behaviour for the current mi level.

WDYT?

Nick

*** infrun.c.~1.203~	2005-08-15 10:38:14.000000000 +1200
--- infrun.c	2005-08-15 10:42:50.000000000 +1200
***************
*** 49,54 ****
--- 49,57 ----
  
  #include "gdb_assert.h"
  #include "mi/mi-common.h"
+ #include "mi/mi-out.h"
+ 
+ extern struct ui_file *raw_stdout;
  
  /* Prototypes for local functions */
  
*************** proceed (CORE_ADDR addr, enum target_sig
*** 785,790 ****
--- 788,799 ----
  
    annotate_starting ();
  
+   if (strcmp (interpreter_p, "mi") == 0)
+     {
+       fputs_unfiltered ("^running\n", raw_stdout);
+       fputs_unfiltered ("(gdb) \n", raw_stdout);
+     }
+ 
    /* Make sure that output from GDB appears before output from the
       inferior.  */
    gdb_flush (gdb_stdout);
*************** Further execution is probably impossible
*** 3136,3141 ****
--- 3145,3158 ----
  done:
    annotate_stopped ();
    observer_notify_normal_stop (stop_bpstat);
+   if ((strcmp (interpreter_p, "mi") == 0) || (ui_out_is_mi_like_p (uiout)))
+       fputs_unfiltered ("*stopped", raw_stdout);
+   if (ui_out_is_mi_like_p (uiout))
+     {
+       mi_out_put (uiout, raw_stdout);
+       mi_out_rewind (uiout);
+     }
+   fputs_unfiltered ("\n", raw_stdout);
  }
  
  static int


*** mi/mi-main.c.~1.80.~	2005-06-14 09:18:08.000000000 +1200
--- mi/mi-main.c	2005-08-14 20:10:44.000000000 +1200
*************** mi_execute_async_cli_command (char *mi, 
*** 1306,1313 ****
           command. */
        if (last_async_command)
  	fputs_unfiltered (last_async_command, raw_stdout);
-       fputs_unfiltered ("^running\n", raw_stdout);
-       fputs_unfiltered ("(gdb) \n", raw_stdout);
        gdb_flush (raw_stdout);
      }
    else
--- 1306,1311 ----
*************** mi_execute_async_cli_command (char *mi, 
*** 1318,1324 ****
           run command to the target. */
        if (last_async_command)
  	fputs_unfiltered (last_async_command, raw_stdout);
-       fputs_unfiltered ("^running\n", raw_stdout);
      }
  
    execute_command ( /*ui */ run, 0 /*from_tty */ );
--- 1316,1321 ----
*************** mi_execute_async_cli_command (char *mi, 
*** 1332,1341 ****
           the stopped message. */
        if (last_async_command)
  	fputs_unfiltered (last_async_command, raw_stdout);
-       fputs_unfiltered ("*stopped", raw_stdout);
-       mi_out_put (uiout, raw_stdout);
-       mi_out_rewind (uiout);
-       fputs_unfiltered ("\n", raw_stdout);
        return MI_CMD_QUIET;
      }
    return MI_CMD_DONE;
--- 1329,1334 ----


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]