This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: mi tty commands
Hi all,
1 week ping.
Thanks,
Bob Rossi
On Thu, Jun 02, 2005 at 06:16:44PM -0400, Bob Rossi wrote:
> On Wed, Jun 01, 2005 at 11:25:16PM +0300, Eli Zaretskii wrote:
> > > Date: Wed, 1 Jun 2005 13:41:49 -0400
> > > From: Bob Rossi <bob@brasko.net>
> > >
> > > Here's the whole patch, inlcuding the doco.
> >
> > Thanks.
> >
> > > Index: gdb/doc/ChangeLog
> > > + * gdb.texinfo (GDB/MI Miscellaneous Commands): Add -inferior-tty-set.
> > > + (GDB/MI Miscellaneous Commands): Add -inferior-tty-show.
> > > + (Input/Output): Document "set/show inferior-tty".
> >
> > There's no need to mention the same node twice. I suggest to reformat
> > as follows:
> >
> > * gdb.texinfo (GDB/MI Miscellaneous Commands): Add -inferior-tty-set.
> > and -inferior-tty-show.
> > (Input/Output): Document "set/show inferior-tty".
>
> Done.
>
> > > RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
> > > retrieving revision 1.258
> > > diff -w -u -r1.258 gdb.texinfo
> > > --- gdb/doc/gdb.texinfo 29 May 2005 03:13:18 -0000 1.258
> > > +++ gdb/doc/gdb.texinfo 1 Jun 2005 17:12:45 -0000
> > > @@ -2090,6 +2090,22 @@
> > > command, only the input @emph{for your program} is affected. The input
> > > for @value{GDBN} still comes from your terminal.
> > >
> > > +@vindex inferior-tty
> >
> > Please don't use @vindex for the "set SOMETHING" commands, we don't do
> > that in GDB. @vindex is generally reserved for convenience variables.
> >
> > I suggest to have a "@cindex inferior tty" entry, though.
>
> Done.
> > > +@cindex Set the inferior controlling terminal
> >
> > Please remove "the", and please don't start the index entries with a
> > capital letter. The convention in GDB (and the preferred style in
> > any manual) is not to capitalize index entries.
> >
>
> Done.
>
> > > +Yet another way to tell @value{GDBN} where you program should do input
> > > +and output is with the @code{set inferior-tty} command. This is currently
> > > +the same as using the @code{tty} command.
> >
> > If we do what I think we should do, i.e. make "tty" an alias to "set
> > inferior-tty", this paragraph will have to be rewritten.
>
> Done.
>
> Below is a patch with all of the changes both you and Daniel have
> pointed out.
>
> Thanks very much,
> Bob Rossi
>
> Index: src/gdb/ChangeLog
> + * fork-child.c (fork-inferior): Use accessor function for
> + inferior_io_terminal.
> + * infcmd.c (inferior_io_terminal): Make static.
> + (set_inferior_io_terminal): New function.
> + (get_inferior_io_terminal): Ditto.
> + (tty_command): Use accessor function.
> + (_initialize_infcmd): Add inferior_tty setshow variable.
> + (_initialize_infcmd): Remove tty command.
> + (_initialize_infcmd): Add a tty command that is an alias.
> + * inferior.h (set_inferior_io_terminal): New prototype.
> + (get_inferior_io_terminal): Ditto.
> + * nto-procfs (procfs_create_inferior): Use accessor function.
> + * win32-nat.c (child_create_inferior): Ditto.
> + * mi/mi-cmd-env.c (mi_cmd_inferior_tty_set): New function.
> + (mi_cmd_inferior_tty_set): Ditto.
> + * mi/mi-cmds.c (mi_cmds): Add inferior-tty-set and inferior-tty-show
> + * mi/mi-cmds.h (mi_cmd_inferior_tty_set): Add prototype.
> + (mi_cmd_inferior_tty_show): Ditto.
>
> Index: src/gdb/doc/ChangeLog
> + * gdb.texinfo (GDB/MI Miscellaneous Commands): Add -inferior-tty-set
> + and -inferior-tty-show.
> + (Input/Output): Document "set/show inferior-tty" and tty alias.
>
> Index: src/gdb/testsuite/ChangeLog
> + * gdb.mi/mi-basics.exp (test_setshow_inferior_tty): Test MI tty
> + command.
>
> Index: src/gdb/fork-child.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/fork-child.c,v
> retrieving revision 1.26
> diff -w -u -r1.26 fork-child.c
> --- src/gdb/fork-child.c 12 May 2005 20:21:17 -0000 1.26
> +++ src/gdb/fork-child.c 2 Jun 2005 22:12:31 -0000
> @@ -138,6 +138,7 @@
> char **save_our_env;
> int shell = 0;
> static char **argv;
> + const char *inferior_io_terminal = get_inferior_io_terminal ();
>
> /* If no exec file handed to us, get it from the exec-file command
> -- with a good, common error message if none is specified. */
> @@ -261,7 +262,7 @@
>
> /* Tell the terminal handling subsystem what tty we plan to run on;
> it will just record the information for later. */
> - new_tty_prefork (inferior_io_terminal);
> + new_tty_prefork ((char *)inferior_io_terminal);
>
> /* It is generally good practice to flush any possible pending stdio
> output prior to doing a fork, to avoid the possibility of both
> Index: src/gdb/infcmd.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/infcmd.c,v
> retrieving revision 1.138
> diff -w -u -r1.138 infcmd.c
> --- src/gdb/infcmd.c 22 May 2005 14:53:34 -0000 1.138
> +++ src/gdb/infcmd.c 2 Jun 2005 22:12:32 -0000
> @@ -136,7 +136,7 @@
>
> /* File name for default use for standard in/out in the inferior. */
>
> -char *inferior_io_terminal;
> +static char *inferior_io_terminal;
>
> /* Pid of our debugged inferior, or 0 if no inferior now.
> Since various parts of infrun.c test this to see whether there is a program
> @@ -203,6 +203,24 @@
>
> /* Accessor routines. */
>
> +void
> +set_inferior_io_terminal (char *terminal_name)
> +{
> + if (inferior_io_terminal)
> + xfree (inferior_io_terminal);
> +
> + if (!terminal_name)
> + inferior_io_terminal = NULL;
> + else
> + inferior_io_terminal = savestring (terminal_name, strlen (terminal_name));
> +}
> +
> +const char *
> +get_inferior_io_terminal (void)
> +{
> + return inferior_io_terminal;
> +}
> +
> char *
> get_inferior_args (void)
> {
> @@ -376,7 +394,7 @@
> if (file == 0)
> error_no_arg (_("terminal name for running target process"));
>
> - inferior_io_terminal = savestring (file, strlen (file));
> + set_inferior_io_terminal (file);
> }
>
> /* Kill the inferior if already running. This function is designed
> @@ -1990,9 +2008,14 @@
> {
> struct cmd_list_element *c;
>
> - c = add_com ("tty", class_run, tty_command,
> - _("Set terminal for future runs of program being debugged."));
> + /* add the filename of the terminal connected to inferior I/O */
> + add_setshow_string_noescape_cmd ("inferior-tty", class_run,
> + &inferior_io_terminal, _("\
> +Set terminal for future runs of program being debugged."), _("\
> +Show terminal for future runs of program being debugged."), _("\
> +Usage: set inferior-tty /dev/pts/1"), NULL, NULL, &setlist, &showlist);
> set_cmd_completer (c, filename_completer);
> + add_com_alias ("tty", "set inferior-tty", class_alias, 0);
>
> add_setshow_optional_filename_cmd ("args", class_run,
> &inferior_args, _("\
> Index: src/gdb/inferior.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/inferior.h,v
> retrieving revision 1.71
> diff -w -u -r1.71 inferior.h
> --- src/gdb/inferior.h 14 May 2005 06:07:42 -0000 1.71
> +++ src/gdb/inferior.h 2 Jun 2005 22:12:33 -0000
> @@ -103,9 +103,10 @@
>
> extern void clear_sigio_trap (void);
>
> -/* File name for default use for standard in/out in the inferior. */
> +/* Set/get file name for default use for standard in/out in the inferior. */
>
> -extern char *inferior_io_terminal;
> +extern void set_inferior_io_terminal (char *terminal_name);
> +extern const char *get_inferior_io_terminal (void);
>
> /* Collected pid, tid, etc. of the debugged inferior. When there's
> no inferior, PIDGET (inferior_ptid) will be 0. */
> Index: src/gdb/nto-procfs.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/nto-procfs.c,v
> retrieving revision 1.13
> diff -w -u -r1.13 nto-procfs.c
> --- src/gdb/nto-procfs.c 15 Feb 2005 15:49:14 -0000 1.13
> +++ src/gdb/nto-procfs.c 2 Jun 2005 22:12:33 -0000
> @@ -984,6 +984,7 @@
> char *in = "", *out = "", *err = "";
> int fd, fds[3];
> sigset_t set;
> + const char *inferior_io_terminal = get_inferior_io_terminal ();
>
> argv = xmalloc (((strlen (allargs) + 1) / (unsigned) 2 + 2) *
> sizeof (*argv));
> @@ -1010,11 +1011,11 @@
> if (inferior_io_terminal)
> {
> if (!in[0])
> - in = inferior_io_terminal;
> + in = (char*)inferior_io_terminal;
> if (!out[0])
> - out = inferior_io_terminal;
> + out = (char*)inferior_io_terminal;
> if (!err[0])
> - err = inferior_io_terminal;
> + err = (char*)inferior_io_terminal;
> }
>
> if (in[0])
> Index: src/gdb/win32-nat.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/win32-nat.c,v
> retrieving revision 1.111
> diff -w -u -r1.111 win32-nat.c
> --- src/gdb/win32-nat.c 23 May 2005 19:32:27 -0000 1.111
> +++ src/gdb/win32-nat.c 2 Jun 2005 22:12:35 -0000
> @@ -1735,6 +1735,7 @@
> const char *sh;
> int tty;
> int ostdin, ostdout, ostderr;
> + const char *inferior_io_terminal = get_inferior_io_terminal ();
>
> if (!exec_file)
> error (_("No executable specified, use `target exec'."));
> Index: src/gdb/doc/gdb.texinfo
> ===================================================================
> RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
> retrieving revision 1.259
> diff -w -u -r1.259 gdb.texinfo
> --- src/gdb/doc/gdb.texinfo 1 Jun 2005 20:38:44 -0000 1.259
> +++ src/gdb/doc/gdb.texinfo 2 Jun 2005 22:12:50 -0000
> @@ -2088,7 +2088,24 @@
>
> When you use the @code{tty} command or redirect input in the @code{run}
> command, only the input @emph{for your program} is affected. The input
> -for @value{GDBN} still comes from your terminal.
> +for @value{GDBN} still comes from your terminal. @code{tty} is an alias
> +for @code{set inferior-tty}.
> +
> +@cindex inferior tty
> +@cindex set inferior controlling terminal
> +You can use the @code{show inferior-tty} command to tell @value{GDBN} to
> +display the name of the terminal that will be used for future runs of your
> +program.
> +
> +@table @code
> +@item set inferior-tty /dev/ttyb
> +@kindex set inferior-tty
> +Set the tty for the program being debugged to /dev/ttyb.
> +
> +@item show inferior-tty
> +@kindex show inferior-tty
> +Show the current tty for the program being debugged.
> +@end table
>
> @node Attach
> @section Debugging an already-running process
> @@ -19122,6 +19139,57 @@
> (@value{GDBP})
> @end smallexample
>
> +@subheading The @code{-inferior-tty-set} Command
> +@findex -inferior-tty-set
> +
> +@subheading Synopsis
> +
> +@smallexample
> +-inferior-tty-set /dev/pts/1
> +@end smallexample
> +
> +Set terminal for future runs of the program being debugged.
> +
> +@subheading @value{GDBN} Command
> +
> +The corresponding @value{GDBN} command is @samp{set inferior-tty /dev/pts/1}.
> +
> +@subheading Example
> +
> +@smallexample
> +(@value{GDBP})
> +-inferior-tty-set /dev/pts/1
> +^done
> +(@value{GDBP})
> +@end smallexample
> +
> +@subheading The @code{-inferior-tty-show} Command
> +@findex -inferior-tty-show
> +
> +@subheading Synopsis
> +
> +@smallexample
> +-inferior-tty-show
> +@end smallexample
> +
> +Show terminal for future runs of program being debugged.
> +
> +@subheading @value{GDBN} Command
> +
> +The corresponding @value{GDBN} command is @samp{show inferior-tty /dev/pts/1}.
> +
> +@subheading Example
> +
> +@smallexample
> +(@value{GDBP})
> +-inferior-tty-set /dev/pts/1
> +^done
> +(@value{GDBP})
> +-inferior-tty-show
> +^done,inferior_tty_terminal="/dev/pts/1"
> +(@value{GDBP})
> +@end smallexample
> +
> @ignore
> @c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> @node GDB/MI Kod Commands
> Index: src/gdb/mi/mi-cmd-env.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/mi/mi-cmd-env.c,v
> retrieving revision 1.8
> diff -w -u -r1.8 mi-cmd-env.c
> --- src/gdb/mi/mi-cmd-env.c 11 Feb 2005 04:06:11 -0000 1.8
> +++ src/gdb/mi/mi-cmd-env.c 2 Jun 2005 22:12:50 -0000
> @@ -244,6 +244,30 @@
> return MI_CMD_DONE;
> }
>
> +/* Set the inferior terminal device name. */
> +enum mi_cmd_result
> +mi_cmd_inferior_tty_set (char *command, char **argv, int argc)
> +{
> + set_inferior_io_terminal (argv[0]);
> +
> + return MI_CMD_DONE;
> +}
> +
> +/* Print the inferior terminal device name */
> +enum mi_cmd_result
> +mi_cmd_inferior_tty_show (char *command, char **argv, int argc)
> +{
> + const char *inferior_io_terminal = get_inferior_io_terminal ();
> +
> + if ( !mi_valid_noargs ("mi_cmd_inferior_tty_show", argc, argv))
> + error (_("mi_cmd_inferior_tty_show: Usage: No args"));
> +
> + if (inferior_io_terminal)
> + ui_out_field_string (uiout, "inferior_tty_terminal", inferior_io_terminal);
> +
> + return MI_CMD_DONE;
> +}
> +
> void
> _initialize_mi_cmd_env (void)
> {
> Index: src/gdb/mi/mi-cmds.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/mi/mi-cmds.c,v
> retrieving revision 1.16
> diff -w -u -r1.16 mi-cmds.c
> --- src/gdb/mi/mi-cmds.c 11 Feb 2005 18:13:55 -0000 1.16
> +++ src/gdb/mi/mi-cmds.c 2 Jun 2005 22:12:50 -0000
> @@ -153,6 +153,8 @@
> { "trace-save", { NULL, 0 }, NULL, NULL },
> { "trace-start", { NULL, 0 }, NULL, NULL },
> { "trace-stop", { NULL, 0 }, NULL, NULL },
> + { "inferior-tty-set", { NULL, 0 }, NULL, mi_cmd_inferior_tty_set},
> + { "inferior-tty-show", { NULL, 0 }, NULL, mi_cmd_inferior_tty_show},
> { "var-assign", { NULL, 0 }, 0, mi_cmd_var_assign},
> { "var-create", { NULL, 0 }, 0, mi_cmd_var_create},
> { "var-delete", { NULL, 0 }, 0, mi_cmd_var_delete},
> Index: src/gdb/mi/mi-cmds.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/mi/mi-cmds.h,v
> retrieving revision 1.15
> diff -w -u -r1.15 mi-cmds.h
> --- src/gdb/mi/mi-cmds.h 13 Jan 2005 22:08:27 -0000 1.15
> +++ src/gdb/mi/mi-cmds.h 2 Jun 2005 22:12:50 -0000
> @@ -96,6 +96,8 @@
> extern mi_cmd_args_ftype mi_cmd_target_select;
> extern mi_cmd_argv_ftype mi_cmd_thread_list_ids;
> extern mi_cmd_argv_ftype mi_cmd_thread_select;
> +extern mi_cmd_argv_ftype mi_cmd_inferior_tty_set;
> +extern mi_cmd_argv_ftype mi_cmd_inferior_tty_show;
> extern mi_cmd_argv_ftype mi_cmd_var_assign;
> extern mi_cmd_argv_ftype mi_cmd_var_create;
> extern mi_cmd_argv_ftype mi_cmd_var_delete;
> Index: src/gdb/testsuite/gdb.mi/mi-basics.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-basics.exp,v
> retrieving revision 1.9
> diff -w -u -r1.9 mi-basics.exp
> --- src/gdb/testsuite/gdb.mi/mi-basics.exp 9 Aug 2004 16:32:44 -0000 1.9
> +++ src/gdb/testsuite/gdb.mi/mi-basics.exp 2 Jun 2005 22:12:59 -0000
> @@ -236,12 +236,42 @@
>
> }
>
> +proc test_setshow_inferior_tty {} {
> + global mi_gdb_prompt
> +
> + # Test that the commands,
> + # -inferior-tty-set
> + # -inferior-tth-show
> + # are setting/getting the same data in GDB.
> +
> + mi_gdb_test "301-inferior-tty-show" \
> + "301\\\^done" \
> + "initial tty is empty"
> +
> + mi_gdb_test "302-inferior-tty-set /dev/pts/1" \
> + "302\\\^done" \
> + "set tty to /dev/pts/1"
> +
> + mi_gdb_test "303-inferior-tty-show" \
> + "303\\\^done,inferior_tty_terminal=\"/dev/pts/1\"" \
> + "tty was set correctly"
> +
> + mi_gdb_test "304-inferior-tty-set" \
> + "304\\\^done" \
> + "set tty to the empty string"
> +
> + mi_gdb_test "305-inferior-tty-show" \
> + "305\\\^done" \
> + "final tty is empty"
> +}
> +
> if [test_mi_interpreter_selection] {
> test_exec_and_symbol_mi_operatons
> test_breakpoints_deletion
> test_dir_specification
> test_cwd_specification
> test_path_specification
> + test_setshow_inferior_tty
> }
>
> mi_gdb_exit