From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5428 invoked by alias); 20 Jan 2012 11:14:11 -0000 Received: (qmail 5417 invoked by uid 22791); 20 Jan 2012 11:14:09 -0000 X-SWARE-Spam-Status: No, hits=-6.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 20 Jan 2012 11:13:53 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q0KBDqiD013604 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 20 Jan 2012 06:13:52 -0500 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q0KBDpCu008220 for ; Fri, 20 Jan 2012 06:13:52 -0500 Message-ID: <4F194C6F.2080404@redhat.com> Date: Fri, 20 Jan 2012 11:33:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:9.0) Gecko/20111222 Thunderbird/9.0 MIME-Version: 1.0 To: GDB Patches Subject: Decouple "set confirm" from `from_tty'. Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-01/txt/msg00730.txt.bz2 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 * 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 * 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