From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 6A71D3858D35 for ; Fri, 4 Feb 2022 17:57:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6A71D3858D35 Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-83-mxKQ7zRLN1WILseirOho2A-1; Fri, 04 Feb 2022 12:57:31 -0500 X-MC-Unique: mxKQ7zRLN1WILseirOho2A-1 Received: by mail-ed1-f69.google.com with SMTP id k12-20020a50c8cc000000b0040f28426e5aso9189edh.17 for ; Fri, 04 Feb 2022 09:57:31 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=PRZkPlEreLZPCR7mljyd439IWGESXu0mVezl6y8SX/g=; b=GQ/bdAmUkXCDYhkEmu0NWrFELYEnqOttf+T0KUdJb2YK1Rond+NGkq2XTT6VQPLtdP aEwDlS2q6vnyc/L376m4IM/BPXf+Iw4OTQNni8mUdOHJlRtZl0fyy/la3adw1eYykc8U utlGHy5v8YziR+mFB2xov16opixF2r+iOMi4t14cvccxGtQKJ9VL7AHTcXrkW6gLPLzr doLThOxZlG4JO4sWsmRpcx0orcUBIjz5jfUbhzeEr1ghpR1hKNj2yReqZaU5SWsS+uUT HsenWl6iEuAXvcUWTqy2lORZ+gdQNZT8wRn/yCkTHcnqcoztw8644w4nZlzx1dd1SMHA XluA== X-Gm-Message-State: AOAM531RMPpIw0hyVPI1nwshMTgMmlqe4hnjlPKbcPf0OJlhRNsi2F9E D3jc+YbeKo/qodbbxDLG0DChUM2KynvJh7vFn069CONiF9TwmG5Y2cAjpRmA7RsJJLsvBw6jiTM ekvELMRVVyQMxzD2hU8BubQ== X-Received: by 2002:a05:6402:17cf:: with SMTP id s15mr235897edy.433.1643997450360; Fri, 04 Feb 2022 09:57:30 -0800 (PST) X-Google-Smtp-Source: ABdhPJypTS9o2wzjcswuQCLMDSVeYcs4lULxVzxcZXMdq23qN8YnQzSlgjcG72zgn9/Pu5StrGfS3w== X-Received: by 2002:a05:6402:17cf:: with SMTP id s15mr235876edy.433.1643997450068; Fri, 04 Feb 2022 09:57:30 -0800 (PST) Received: from localhost (92.40.178.205.threembb.co.uk. [92.40.178.205]) by smtp.gmail.com with ESMTPSA id p2sm1121139edy.73.2022.02.04.09.57.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Feb 2022 09:57:29 -0800 (PST) Date: Fri, 4 Feb 2022 17:57:27 +0000 From: Andrew Burgess To: Tankut Baris Aktemur Cc: gdb-patches@sourceware.org, tom@tromey.com Subject: Re: [PATCH v4 3/3] gdb: add the 'set/show suppress-cli-notifications' command Message-ID: <20220204175727.GC1917497@redhat.com> References: <9f95e5797c42f6b1c108284d762de0a523f453e8.1643903747.git.tankut.baris.aktemur@intel.com> MIME-Version: 1.0 In-Reply-To: <9f95e5797c42f6b1c108284d762de0a523f453e8.1643903747.git.tankut.baris.aktemur@intel.com> X-Operating-System: Linux/5.8.18-100.fc31.x86_64 (x86_64) X-Uptime: 17:56:43 up 11 days, 8:43, X-Editor: GNU Emacs [ http://www.gnu.org/software/emacs ] X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIM_INVALID, DKIM_SIGNED, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_SHORT, RCVD_IN_ABUSEAT, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Feb 2022 17:57:39 -0000 * Tankut Baris Aktemur via Gdb-patches [2022-02-03 17:01:21 +0100]: > GDB already has a flag to suppress printing notification events, such > as thread and inferior context switches, on the CLI. This is used > internally when executing commands. Make the flag available to the > user via a new command. This is expected to be useful in scripts. > > For instance, suppose that when Inferior 1 gets to a certain state, > you want to add and set up a new inferior using the commands below, > but you also want to have a reduced/clean output. > > define do-setup > printf "Setting up Inferior 2...\n" > add-inferior -exec a.out > inferior 2 > break file.c:3 > run > inferior 1 > printf "Done\n" > end > > Currently, GDB prints > > (gdb) do-setup > Setting up Inferior 2... > [New inferior 2] > Added inferior 2 on connection 1 (native) > [Switching to inferior 2 [] (/tmp/a.out)] > Breakpoint 2 at 0x1155: file file.c, line 3. > > Thread 2.1 "a.out" hit Breakpoint 2, main () at file.c:3 > 3 return 0; > [Switching to inferior 1 [process 7670] (/tmp/test)] > [Switching to thread 1.1 (process 7670)] > #0 main () at test.c:2 > 2 int a = 1; > Done > > GDB's Python API make it possible to capture and return GDB's output, > but this does not work for all the streams. In particular, CLI > notification events are not captured: > > (gdb) python gdb.execute("do-setup", False, True) > [Switching to inferior 2 [] (/tmp/a.out)] > > Thread 2.1 "a.out" hit Breakpoint 2, main () at file.c:3 > 3 return 0; > [Switching to inferior 1 [process 8263] (/tmp/test)] > [Switching to thread 1.1 (process 8263)] > #0 main () at test.c:2 > 2 int a = 1; > > You can use the new "set suppress-cli-notifications" command to > suppress the output: > > (gdb) set suppress-cli-notifications on > (gdb) do-setup > Setting up Inferior 2... > [New inferior 2] > Added inferior 2 on connection 1 (native) > Breakpoint 2 at 0x1155: file file.c, line 3. > Done Thanks for making those changes. This looks good to me. Thanks, Andrew > --- > gdb/NEWS | 8 +++ > gdb/cli/cli-cmds.c | 39 +++++++++++ > gdb/doc/gdb.texinfo | 69 +++++++++++++++++++ > .../gdb.base/cli-suppress-notification.c | 26 +++++++ > .../gdb.base/cli-suppress-notification.exp | 39 +++++++++++ > 5 files changed, 181 insertions(+) > create mode 100644 gdb/testsuite/gdb.base/cli-suppress-notification.c > create mode 100644 gdb/testsuite/gdb.base/cli-suppress-notification.exp > > diff --git a/gdb/NEWS b/gdb/NEWS > index e1900596ca7..f150379d722 100644 > --- a/gdb/NEWS > +++ b/gdb/NEWS > @@ -81,6 +81,14 @@ maint show gnu-source-highlight enabled > styling to a particular source file, then the Python Pygments > library will be used instead. > > +set suppress-cli-notifications (on|off) > +show suppress-cli-notifications > + This controls whether printing the notifications is suppressed for CLI. > + CLI notifications occur when you change the selected context > + (i.e., the current inferior, thread and/or the frame), or when > + the program being debugged stops (e.g., because of hitting a > + breakpoint, completing source-stepping, an interrupt, etc.). > + > * Changed commands > > maint packet > diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c > index 1d14b8e4527..825ddfe2be3 100644 > --- a/gdb/cli/cli-cmds.c > +++ b/gdb/cli/cli-cmds.c > @@ -192,6 +192,11 @@ static const char *const script_ext_enums[] = { > > static const char *script_ext_mode = script_ext_soft; > > + > +/* User-controllable flag to suppress event notification on CLI. */ > + > +static bool user_wants_cli_suppress_notification = false; > + > /* Utility used everywhere when at least one argument is needed and > none is supplied. */ > > @@ -2136,6 +2141,28 @@ show_max_user_call_depth (struct ui_file *file, int from_tty, > value); > } > > +/* Implement 'show suppress-cli-notifications'. */ > + > +static void > +show_suppress_cli_notifications (ui_file *file, int from_tty, > + cmd_list_element *c, const char *value) > +{ > + fprintf_filtered (file, _("Suppression of printing CLI notifications " > + "is %s.\n"), value); > +} > + > +/* Implement 'set suppress-cli-notifications'. */ > + > +static void > +set_suppress_cli_notifications (const char *args, int from_tty, > + cmd_list_element *c) > +{ > + cli_suppress_notification.user_selected_context > + = user_wants_cli_suppress_notification; > + cli_suppress_notification.normal_stop > + = user_wants_cli_suppress_notification; > +} > + > /* Returns the cmd_list_element in SHOWLIST corresponding to the first > argument of ARGV, which must contain one single value. > Throws an error if no value provided, or value not correct. > @@ -2734,6 +2761,18 @@ Make \"wLapPeu\" an alias of 2 nested \"with\":\n\ > > set_cmd_completer_handle_brkchars (c, alias_command_completer); > > + add_setshow_boolean_cmd ("suppress-cli-notifications", no_class, > + &user_wants_cli_suppress_notification, > + _("\ > +Set whether printing notifications on CLI is suppressed."), _("\ > +Show whether printing notifications on CLI is suppressed."), _("\ > +When on, printing notifications (such as inferior/thread switch)\n\ > +on CLI is suppressed."), > + set_suppress_cli_notifications, > + show_suppress_cli_notifications, > + &setlist, > + &showlist); > + > const char *source_help_text = xstrprintf (_("\ > Read commands from a file named FILE.\n\ > \n\ > diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo > index fe81687a66c..815005b6b0c 100644 > --- a/gdb/doc/gdb.texinfo > +++ b/gdb/doc/gdb.texinfo > @@ -27211,6 +27211,75 @@ inside a cygwin window. > Displays whether the debugger is operating in interactive mode or not. > @end table > > +@table @code > +@kindex set suppress-cli-notifications > +@item set suppress-cli-notifications > +If @code{on}, command-line-interface (CLI) notifications that are > +printed by @value{GDBN} are suppressed. If @code{off}, the > +notifications are printed as usual. The default value is @code{off}. > +CLI notifications occur when you change the selected context or when > +the program being debugged stops, as detailed below. > + > +@table @emph > +@item User-selected context changes: > +When you change the selected context (i.e.@: the current inferior, > +thread and/or the frame), @value{GDBN} prints information about the > +new context. For example, the default behavior is below: > + > +@smallexample > +(gdb) inferior 1 > +[Switching to inferior 1 [process 634] (/tmp/test)] > +[Switching to thread 1 (process 634)] > +#0 main () at test.c:3 > +3 return 0; > +(gdb) > +@end smallexample > + > +When the notifications are suppressed, the new context is not printed: > + > +@smallexample > +(gdb) set suppress-cli-notifications on > +(gdb) inferior 1 > +(gdb) > +@end smallexample > + > +@item The program being debugged stops: > +When the program you are debugging stops (e.g.@: because of hitting a > +breakpoint, completing source-stepping, an interrupt, etc.), > +@value{GDBN} prints information about the stop event. For example, > +below is a breakpoint hit: > + > +@smallexample > +(gdb) break test.c:3 > +Breakpoint 2 at 0x555555555155: file test.c, line 3. > +(gdb) continue > +Continuing. > + > +Breakpoint 2, main () at test.c:3 > +3 return 0; > +(gdb) > +@end smallexample > + > +When the notifications are suppressed, the output becomes: > + > +@smallexample > +(gdb) break test.c:3 > +Breakpoint 2 at 0x555555555155: file test.c, line 3. > +(gdb) set suppress-cli-notifications on > +(gdb) continue > +Continuing. > +(gdb) > +@end smallexample > + > +Suppressing CLI notifications may be useful in scripts to obtain a > +reduced output from a list of commands. > +@end table > + > +@kindex show suppress-cli-notifications > +@item show suppress-cli-notifications > +Displays whether printing CLI notifications is suppressed or not. > +@end table > + > @node Extending GDB > @chapter Extending @value{GDBN} > @cindex extending GDB > diff --git a/gdb/testsuite/gdb.base/cli-suppress-notification.c b/gdb/testsuite/gdb.base/cli-suppress-notification.c > new file mode 100644 > index 00000000000..243dbc9c70a > --- /dev/null > +++ b/gdb/testsuite/gdb.base/cli-suppress-notification.c > @@ -0,0 +1,26 @@ > +/* This testcase is part of GDB, the GNU debugger. > + > + Copyright 2020-2022 Free Software Foundation, Inc. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see . */ > + > +static int global = 0; > + > +int > +main () > +{ > + global++; > + global++; > + return 0; > +} > diff --git a/gdb/testsuite/gdb.base/cli-suppress-notification.exp b/gdb/testsuite/gdb.base/cli-suppress-notification.exp > new file mode 100644 > index 00000000000..1e4cc9869e4 > --- /dev/null > +++ b/gdb/testsuite/gdb.base/cli-suppress-notification.exp > @@ -0,0 +1,39 @@ > +# Copyright 2020-2022 Free Software Foundation, Inc. > + > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 3 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . > + > +# Test the set/show suppress-cli-notifications command. > + > +standard_testfile > + > +if {[prepare_for_testing "failed to prepare" ${binfile} ${srcfile}]} { > + return > +} > + > +if {![runto_main]} { > + return > +} > + > +gdb_test "inferior 1" ".*Switching to inferior 1 .* to thread 1 .*" \ > + "inferior switch is not suppressed" > + > +gdb_test_no_output "set suppress-cli-notifications on" > +gdb_test_no_output "inferior 1" "inferior switch is suppressed" > +gdb_test_no_output "next" "stepping is suppressed" > + > +# Now check that suppression can be turned back off. > +gdb_test_no_output "set suppress-cli-notifications off" > +gdb_test "inferior 1" ".*Switching to inferior 1 .* to thread 1 .*" \ > + "inferior switch is not suppressed again" > +gdb_test "next" "return 0;" "stepping is not suppressed" > -- > 2.33.1 > > Intel Deutschland GmbH > Registered Address: Am Campeon 10, 85579 Neubiberg, Germany > Tel: +49 89 99 8853-0, www.intel.de > Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva > Chairperson of the Supervisory Board: Nicole Lau > Registered Office: Munich > Commercial Register: Amtsgericht Muenchen HRB 186928 >