This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: PING: [RFA/doco] document "set/show interactive-mode"
- From: Joel Brobecker <brobecker at adacore dot com>
- To: Eli Zaretskii <eliz at gnu dot org>
- Cc: gdb-patches at sourceware dot org
- Date: Wed, 9 Sep 2009 17:58:42 -0700
- Subject: Re: PING: [RFA/doco] document "set/show interactive-mode"
- References: <20090623181341.GK5085@adacore.com> <20090909180355.GE20694@adacore.com> <8363bs2al9.fsf@gnu.org>
Hi Eli,
Thanks for the super-fast reply. Here is a new version which hopefully
addresses all your comments (and adds a NEWS entry). Does it look
better?
Thanks,
--
Joel
commit d58a0dcbec3bc69d86509c2c5bc30642be11dffe
Author: Joel Brobecker <brobecker@adacore.com>
Date: Wed Sep 9 17:39:10 2009 -0700
gdb/:
* top.c (interactive_mode): New static variable.
(show_interactive_mode): New function.
(input_from_terminal_p): If interactive_mode is not auto, then
use that rather than checking the stdin settings.
(init_main): Add "set/show interactive-mode" command.
* NEWS: Add entry for new "set/show interactive-mode" command.
gdb/doc/:
Add documentation for set/show interactive-mode.
* gdb.texinfo (Other Misc Settings): New node.
diff --git a/gdb/NEWS b/gdb/NEWS
index e3e6774..14da6c8 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -400,6 +400,14 @@ show stack-cache
performance of remote debugging (particularly backtraces) without
affecting correctness.
+set interactive-mode (on|off|auto)
+show interactive-mode
+ Control whether GDB runs in interactive mode (on) or not (off).
+ When in interactive mode, GDB waits for the user to answer all
+ queries. Otherwise, GDB does not wait and assumes the default
+ answer. When set to auto (the default), GDB determines which
+ mode to use based on the stdin settings.
+
* Removed commands
info forks
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 52ead12..7b26675 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -17620,6 +17620,7 @@ described here.
* ABI:: Configuring the current ABI
* Messages/Warnings:: Optional warnings and messages
* Debugging Output:: Optional messages about internal happenings
+* Other Misc Settings:: Other Miscellaneous Settings
@end menu
@node Prompt
@@ -18250,6 +18251,28 @@ Turns on or off debugging messages for built-in XML parsers.
Displays the current state of XML debugging messages.
@end table
+@node Other Misc Settings
+@section Other Miscellaneous Settings
+@cindex miscellaneous settings
+
+@table @code
+@kindex set interactive-mode
+@item set interactive-mode
+If @code{on}, forces @value{GDBN} to operate interactively.
+If @code{off}, forces @value{GDBN} to operate non-interactively,
+If @code{auto} (the default), @value{GDBN} guesses which mode to use,
+based on whether the debugger was started in a terminal or not.
+
+In the vast majority of cases, the debugger should be able to guess
+correctly which mode should be used. But this setting can be useful
+in certain specific cases, such as running a MinGW @value{GDBN}
+inside a cygwin window.
+
+@kindex show interactive-mode
+@item show interactive-mode
+Displays whether the debugger is operating in interactive mode or not.
+@end table
+
@node Extending GDB
@chapter Extending @value{GDBN}
@cindex extending GDB
diff --git a/gdb/top.c b/gdb/top.c
index b98fa9a..1b4aa9d 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -1318,12 +1318,38 @@ quit_force (char *args, int from_tty)
exit (exit_code);
}
+/* If OFF, the debugger will run in non-interactive mode, which means
+ that it will automatically select the default answer to all the
+ queries made to the user. If ON, gdb will wait for the user to
+ answer all queries. If AUTO, gdb will determine whether to run
+ in interactive mode or not depending on whether stdin is a terminal
+ or not. */
+static enum auto_boolean interactive_mode = AUTO_BOOLEAN_AUTO;
+
+/* Implement the "show interactive-mode" option. */
+
+static void
+show_interactive_mode (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
+{
+ if (interactive_mode == AUTO_BOOLEAN_AUTO)
+ fprintf_filtered (file, "\
+Debugger's interactive mode is %s (currently %s).\n",
+ value, input_from_terminal_p () ? "on" : "off");
+ else
+ fprintf_filtered (file, "Debugger's interactive mode is %s.\n", value);
+}
+
/* Returns whether GDB is running on a terminal and input is
currently coming from that terminal. */
int
input_from_terminal_p (void)
{
+ if (interactive_mode != AUTO_BOOLEAN_AUTO)
+ return interactive_mode == AUTO_BOOLEAN_TRUE;
+
if (gdb_has_a_terminal () && instream == stdin)
return 1;
@@ -1655,6 +1681,18 @@ Use \"on\" to enable the notification, and \"off\" to disable it."),
show_exec_done_display_p,
&setlist, &showlist);
+ add_setshow_auto_boolean_cmd ("interactive-mode", class_support,
+ &interactive_mode, _("\
+Set whether GDB should run in interactive mode or not"), _("\
+Show whether GDB runs in interactive mode"), _("\
+If on, run in interactive mode and wait for the user to answer\n\
+all queries. If off, run in non-interactive mode and automatically\n\
+assume the default answer to all queries. If auto (the default),\n\
+determine which mode to use based on the standard input settings"),
+ NULL,
+ show_interactive_mode,
+ &setlist, &showlist);
+
add_setshow_filename_cmd ("data-directory", class_maintenance,
&gdb_datadir, _("Set GDB's data directory."),
_("Show GDB's data directory."),