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]

Decouple "set confirm" from `from_tty'.


Short version: I'd like to stop "set confirm off" from also disabling from_tty.


I got confused yesterday because I did (without realizing I specified
the wrong path):

...
(gdb) source /wrong/path/to/file.py
(gdb)
...
...

and then bits that were supposedly loaded from file.py
weren't working.  I then got really surprised when I realized
that I had used the wrong path to the file, but GDB hadn't
complained.  Restarting GDB, and retrying the source command,
I got the expected error back:

 (gdb) source /wrong/path/to/file.py
 /wrong/path/to/file.py: No such file or directory.

Eventually, I figured out this was caused by having done
"set confirm off" before the source command.

 (gdb) source /wrong/path/to/file.py
 /wrong/path/to/file.py: No such file or directory.
 (gdb) set confirm off
 (gdb) source /wrong/path/to/file.py
 (gdb)

This was very surprising to me, and I assume to surprise other
users too.  Turns out that "set confirm off" also has the
side-effect of running commands with from_tty == 0, which
silences many things.  E.g.,

 (gdb) attach 10203
 Attaching to process 10203
 Reading symbols from /bin/sleep...(no debugging symbols found)...done.
 Reading symbols from /lib64/libc.so.6...(no debugging symbols found)...done.
 Loaded symbols for /lib64/libc.so.6
 Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
 Loaded symbols for /lib64/ld-linux-x86-64.so.2
 0x000000339e6bbcd0 in __nanosleep_nocancel () from /lib64/libc.so.6
 (gdb)

vs

 (gdb) set confirm off
 (gdb) attach 10203
 0x000000339e6bbcd0 in __nanosleep_nocancel () from /lib64/libc.so.6
 (gdb)

I couldn't find anything in the documentation mentioning
this.  I can't think of why this is done this way, other than an
historic accident of the command's evolution.

Sat Dec 22 02:51:40 1990  John Gilmore  (gnu at cygint)

        * main.c:  Replace "stupid" with "caution"; you now "set caution
        on or off".

Mon Apr 15 21:45:35 1991  Jim Kingdon  (kingdon at cygint.cygnus.com)

        * main.c (initialize_main): Rename "set caution" to
        "set confirm".

So I'd like to stop it doing that.

Comments?

gdb/
2012-01-19  Pedro Alves  <palves@redhat.com>

	* top.c (caution): Rename to ...
	(confirm): ... this.
	(show_caution): Rename to ...
	(show_confirm): ... this.
	(quit_cover): Adjust.
	(execute_command): Don't consider the current value of `caution'.
	(_initialize_command): Adjust.
	* top.h (caution): Rename to ...
	(confirm): ... this.
	(internal_vproblem, defaulted_query): Adjust.

gdb/testsuite/
2012-01-19  Pedro Alves  <palves@redhat.com>

	* call-signal-resume.exp: Allow output after "return".

---

 gdb/testsuite/gdb.base/call-signal-resume.exp |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/gdb/testsuite/gdb.base/call-signal-resume.exp b/gdb/testsuite/gdb.base/call-signal-resume.exp
index 1c4517d..d383f5c 100644
--- a/gdb/testsuite/gdb.base/call-signal-resume.exp
+++ b/gdb/testsuite/gdb.base/call-signal-resume.exp
@@ -99,7 +99,7 @@ if { "$frame_number" == "" } {
 # Pop the dummy frame.
 gdb_test "frame $frame_number" ".*"
 gdb_test_no_output "set confirm off"
-gdb_test_no_output "return"
+gdb_test "return" ""

 # Resume execution, the program should continue without any signal.

@@ -132,7 +132,7 @@ if { "$frame_number" == "" } {
 # Pop the dummy frame.
 gdb_test "frame $frame_number" ".*"
 gdb_test_no_output "set confirm off"
-gdb_test_no_output "return"
+gdb_test "return" ""

 # Continue again, this time we should get to the signal handler.

diff --git a/gdb/top.c b/gdb/top.c
index c4e913d..e41f56c 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -98,11 +98,13 @@ int use_windows = 0;

 extern char lang_frame_mismatch_warn[];		/* language.c */

-/* Flag for whether we want all the "from_tty" gubbish printed.  */
+/* Flag for whether we want to confirm potentially dangerous
+   operations.  Default is yes.  */
+
+int confirm = 1;

-int caution = 1;		/* Default is yes, sigh.  */
 static void
-show_caution (struct ui_file *file, int from_tty,
+show_confirm (struct ui_file *file, int from_tty,
 	      struct cmd_list_element *c, const char *value)
 {
   fprintf_filtered (file, _("Whether to confirm potentially "
@@ -289,9 +291,9 @@ void (*deprecated_context_hook) (int id);
 /* static */ void
 quit_cover (void)
 {
-  caution = 0;			/* Throw caution to the wind -- we're exiting.
-				   This prevents asking the user dumb
-				   questions.  */
+  /* Stop asking user for confirmation --- we're exiting.  This
+     prevents asking the user dumb questions.  */
+  confirm = 0;
   quit_command ((char *) 0, 0);
 }
 #endif /* defined SIGHUP */
@@ -471,13 +473,13 @@ execute_command (char *p, int from_tty)
       if (c->class == class_user)
 	execute_user_command (c, arg);
       else if (c->type == set_cmd || c->type == show_cmd)
-	do_setshow_command (arg, from_tty & caution, c);
+	do_setshow_command (arg, from_tty, c);
       else if (!cmd_func_p (c))
 	error (_("That is not a command, just a help topic."));
       else if (deprecated_call_command_hook)
-	deprecated_call_command_hook (c, arg, from_tty & caution);
+	deprecated_call_command_hook (c, arg, from_tty);
       else
-	cmd_func (c, arg, from_tty & caution);
+	cmd_func (c, arg, from_tty);

       /* If the interpreter is in sync mode (we're running a user
 	 command's list, running command hooks or similars), and we
@@ -1633,11 +1635,11 @@ Show the filename in which to record the command history"), _("\
 			    show_history_filename,
 			    &sethistlist, &showhistlist);

-  add_setshow_boolean_cmd ("confirm", class_support, &caution, _("\
+  add_setshow_boolean_cmd ("confirm", class_support, &confirm, _("\
 Set whether to confirm potentially dangerous operations."), _("\
 Show whether to confirm potentially dangerous operations."), NULL,
 			   NULL,
-			   show_caution,
+			   show_confirm,
 			   &setlist, &showlist);

   add_setshow_zinteger_cmd ("annotate", class_obscure, &annotation_level, _("\
diff --git a/gdb/top.h b/gdb/top.h
index 55ce104..6f74233 100644
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -26,7 +26,7 @@ extern char *saved_command_line;
 extern int saved_command_line_size;
 extern FILE *instream;
 extern int in_user_command;
-extern int caution;
+extern int confirm;
 extern char gdb_dirbuf[1024];
 extern int inhibit_gdbinit;
 extern int epoch_interface;
diff --git a/gdb/utils.c b/gdb/utils.c
index 4863e41..39ec254 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -970,7 +970,7 @@ internal_vproblem (struct internal_problem *problem,
       /* Default (yes/batch case) is to quit GDB.  When in batch mode
 	 this lessens the likelihood of GDB going into an infinite
 	 loop.  */
-      if (caution == 0)
+      if (!confirm)
         {
           /* Emit the message and quit.  */
           fputs_unfiltered (reason, gdb_stderr);
@@ -1384,7 +1384,7 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)

   /* Automatically answer the default value if the user did not want
      prompts or the command was issued with the server prefix.  */
-  if (! caution || server_command)
+  if (!confirm || server_command)
     return def_value;

   /* If input isn't coming from the user directly, just say what


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