public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Suppressing CLI notifications
@ 2022-01-20 11:42 Tankut Baris Aktemur
  2022-01-20 11:42 ` [PATCH v2 3/3] gdb: add the 'set/show suppress-notification-cli' command Tankut Baris Aktemur
  2022-02-02 10:55 ` [PATCH v2 0/3] Suppressing CLI notifications Aktemur, Tankut Baris
  0 siblings, 2 replies; 5+ messages in thread
From: Tankut Baris Aktemur @ 2022-01-20 11:42 UTC (permalink / raw)
  To: gdb-patches; +Cc: tom, aburgess, eliz

Hello,

This is a small series about suppressing CLI notifications.  The first
revision is available at

  https://sourceware.org/pipermail/gdb-patches/2021-December/184008.html

In Revision v2:

  * Patch 1/3 is omitted (already approved).
  * Patch 2/3 is omitted (already approved).
  * Patch 3/3 makes the following updates to address Tom and Andrew's
    comments:

    - The new command is converted to a regular command instead of a
      "maint" command.

    - GDB's doc (gdb.texinfo) is expanded to include the new command.
      The documentation explains what can be suppressed.

    - The commit message as well as gdb.texinfo contain a small but
      concrete example.

Regards
Baris

Tankut Baris Aktemur (1):
  gdb: add the 'set/show suppress-notification-cli' command

 gdb/NEWS                                      |   5 +
 gdb/cli/cli-cmds.c                            |  35 +++++
 gdb/doc/gdb.texinfo                           | 121 ++++++++++++++++++
 .../gdb.base/cli-suppress-notification.c      |  22 ++++
 .../gdb.base/cli-suppress-notification.exp    |  33 +++++
 5 files changed, 216 insertions(+)
 create mode 100644 gdb/testsuite/gdb.base/cli-suppress-notification.c
 create mode 100644 gdb/testsuite/gdb.base/cli-suppress-notification.exp

-- 
2.33.1

Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://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


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 3/3] gdb: add the 'set/show suppress-notification-cli' command
  2022-01-20 11:42 [PATCH v2 0/3] Suppressing CLI notifications Tankut Baris Aktemur
@ 2022-01-20 11:42 ` Tankut Baris Aktemur
  2022-02-02 15:34   ` Andrew Burgess
  2022-02-02 10:55 ` [PATCH v2 0/3] Suppressing CLI notifications Aktemur, Tankut Baris
  1 sibling, 1 reply; 5+ messages in thread
From: Tankut Baris Aktemur @ 2022-01-20 11:42 UTC (permalink / raw)
  To: gdb-patches; +Cc: tom, aburgess, eliz

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 [<null>] (/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 [<null>] (/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-notification-cli" command to
suppress the output:

  (gdb) set suppress-notification-cli 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
---
 gdb/NEWS                                      |   5 +
 gdb/cli/cli-cmds.c                            |  35 +++++
 gdb/doc/gdb.texinfo                           | 121 ++++++++++++++++++
 .../gdb.base/cli-suppress-notification.c      |  22 ++++
 .../gdb.base/cli-suppress-notification.exp    |  33 +++++
 5 files changed, 216 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 8c13cefb22f..c679bbbf799 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -81,6 +81,11 @@ maint show gnu-source-highlight enabled
   styling to a particular source file, then the Python Pygments
   library will be used instead.
 
+set suppress-notification-cli (on|off)
+show suppress-notification-cli
+  This controls whether printing the notification events is suppressed
+  for CLI.
+
 * Changed commands
 
 maint packet
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index e62e7a9331f..18dc0247524 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;
 \f
+
+/* 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.  */
 
@@ -2123,6 +2128,24 @@ show_max_user_call_depth (struct ui_file *file, int from_tty,
 		    value);
 }
 
+static void
+show_suppress_notification_cli (ui_file *file, int from_tty,
+				cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("Suppression of printing CLI notification events "
+			    "is %s.\n"), value);
+}
+
+static void
+set_suppress_notification_cli (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.
@@ -2721,6 +2744,18 @@ Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
 
   set_cmd_completer_handle_brkchars (c, alias_command_completer);
 
+  add_setshow_boolean_cmd ("suppress-notification-cli", no_class,
+			   &user_wants_cli_suppress_notification,
+			   _("\
+Set whether printing notification events on CLI is suppressed."), _("\
+Show whether printing notification events on CLI is suppressed."), _("\
+When on, printing notification events (such as inferior/thread switch)\n\
+on CLI is suppressed."),
+			   set_suppress_notification_cli,
+			   show_suppress_notification_cli,
+			   &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..fadde0eec7f 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -27211,6 +27211,127 @@ inside a cygwin window.
 Displays whether the debugger is operating in interactive mode or not.
 @end table
 
+@table @code
+@kindex set suppress-notification-cli
+@item set suppress-notification-cli
+If @code{on}, command-line-interface (CLI) notification events that
+are printed by @value{GDBN} are suppressed.  If @code{off}, the
+notification events are printed as usual.  The default value is
+@code{off}.  The CLI notification events occur when you change the
+selected context or when the program being debugged stops, as detailed
+below.
+
+@noindent
+@emph{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
+
+@noindent
+When the events are suppressed, the new context is not printed:
+
+@smallexample
+(gdb) set suppress-notification-cli on
+(gdb) inferior 1
+(gdb)
+@end smallexample
+
+@noindent
+@emph{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 event:
+
+@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
+
+@noindent
+When the events are suppressed, the output becomes:
+
+@smallexample
+(gdb) break test.c:3
+Breakpoint 2 at 0x555555555155: file test.c, line 3.
+(gdb) set suppress-notification-cli on
+(gdb) continue
+Continuing.
+(gdb)
+@end smallexample
+
+@noindent
+Suppressing CLI notification events may be useful in scripts to obtain
+a reduced output from a list of commands.  For instance, suppose that
+you want to add and set up a new inferior using the following
+commands:
+
+@smallexample
+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
+@end smallexample
+
+@noindent
+When the CLI notification events are not suppressed, the output is as
+follows:
+
+@smallexample
+(gdb) do-setup
+Setting up Inferior 2...
+[New inferior 2]
+Added inferior 2 on connection 1 (native)
+[Switching to inferior 2 [<null>] (/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 5714] (/tmp/test)]
+[Switching to thread 1.1 (process 5714)]
+#0  main () at test.c:2
+2         int a = 1;
+Done
+@end smallexample
+
+@noindent
+When suppressed, the output becomes
+
+@smallexample
+(gdb) set suppress-notification-cli 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
+@end smallexample
+
+@kindex show suppress-notification-cli
+@item show suppress-notification-cli
+Displays whether printing CLI notification events 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..ea7823a5d58
--- /dev/null
+++ b/gdb/testsuite/gdb.base/cli-suppress-notification.c
@@ -0,0 +1,22 @@
+/* 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 <http://www.gnu.org/licenses/>.  */
+
+int
+main ()
+{
+  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..856a737f238
--- /dev/null
+++ b/gdb/testsuite/gdb.base/cli-suppress-notification.exp
@@ -0,0 +1,33 @@
+# 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 <http://www.gnu.org/licenses/>.
+
+# Test the cli-suppress-notification 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 .*" \
+    "not suppressed"
+
+gdb_test_no_output "set suppress-notification-cli on"
+
+gdb_test_no_output "inferior 1" "suppressed"
-- 
2.33.1

Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://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


^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH v2 0/3] Suppressing CLI notifications
  2022-01-20 11:42 [PATCH v2 0/3] Suppressing CLI notifications Tankut Baris Aktemur
  2022-01-20 11:42 ` [PATCH v2 3/3] gdb: add the 'set/show suppress-notification-cli' command Tankut Baris Aktemur
@ 2022-02-02 10:55 ` Aktemur, Tankut Baris
  1 sibling, 0 replies; 5+ messages in thread
From: Aktemur, Tankut Baris @ 2022-02-02 10:55 UTC (permalink / raw)
  To: gdb-patches; +Cc: tom, aburgess, eliz

On Thursday, January 20, 2022 12:43 PM, Aktemur, Tankut Baris wrote:
> Hello,
> 
> This is a small series about suppressing CLI notifications.  The first
> revision is available at
> 
>   https://sourceware.org/pipermail/gdb-patches/2021-December/184008.html
> 
> In Revision v2:
> 
>   * Patch 1/3 is omitted (already approved).
>   * Patch 2/3 is omitted (already approved).
>   * Patch 3/3 makes the following updates to address Tom and Andrew's
>     comments:
> 
>     - The new command is converted to a regular command instead of a
>       "maint" command.
> 
>     - GDB's doc (gdb.texinfo) is expanded to include the new command.
>       The documentation explains what can be suppressed.
> 
>     - The commit message as well as gdb.texinfo contain a small but
>       concrete example.
> 
> Regards
> Baris
> 

Kindly pinging.

Thanks
-Baris


Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://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


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 3/3] gdb: add the 'set/show suppress-notification-cli' command
  2022-01-20 11:42 ` [PATCH v2 3/3] gdb: add the 'set/show suppress-notification-cli' command Tankut Baris Aktemur
@ 2022-02-02 15:34   ` Andrew Burgess
  2022-02-03  8:28     ` Aktemur, Tankut Baris
  0 siblings, 1 reply; 5+ messages in thread
From: Andrew Burgess @ 2022-02-02 15:34 UTC (permalink / raw)
  To: Tankut Baris Aktemur; +Cc: gdb-patches, tom, eliz

* Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> [2022-01-20 12:42:52 +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 [<null>] (/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 [<null>] (/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-notification-cli" command to
> suppress the output:
> 
>   (gdb) set suppress-notification-cli 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
> ---
>  gdb/NEWS                                      |   5 +
>  gdb/cli/cli-cmds.c                            |  35 +++++
>  gdb/doc/gdb.texinfo                           | 121 ++++++++++++++++++
>  .../gdb.base/cli-suppress-notification.c      |  22 ++++
>  .../gdb.base/cli-suppress-notification.exp    |  33 +++++
>  5 files changed, 216 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 8c13cefb22f..c679bbbf799 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -81,6 +81,11 @@ maint show gnu-source-highlight enabled
>    styling to a particular source file, then the Python Pygments
>    library will be used instead.
>  
> +set suppress-notification-cli (on|off)
> +show suppress-notification-cli
> +  This controls whether printing the notification events is suppressed
> +  for CLI.
> +
>  * Changed commands
>  
>  maint packet
> diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
> index e62e7a9331f..18dc0247524 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;
>  \f
> +
> +/* 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.  */
>  
> @@ -2123,6 +2128,24 @@ show_max_user_call_depth (struct ui_file *file, int from_tty,
>  		    value);
>  }
>  
> +static void
> +show_suppress_notification_cli (ui_file *file, int from_tty,
> +				cmd_list_element *c, const char *value)

This needs a comment, just:

  /* Implement 'show suppress-notification-cli'.  */

will do.

> +{
> +  fprintf_filtered (file, _("Suppression of printing CLI notification events "
> +			    "is %s.\n"), value);
> +}
> +
> +static void
> +set_suppress_notification_cli (const char *args, int from_tty,
> +			       cmd_list_element *c)

Like above, but 'set suppress-notification-cli'.

> +{
> +  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.
> @@ -2721,6 +2744,18 @@ Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
>  
>    set_cmd_completer_handle_brkchars (c, alias_command_completer);
>  
> +  add_setshow_boolean_cmd ("suppress-notification-cli", no_class,
> +			   &user_wants_cli_suppress_notification,
> +			   _("\
> +Set whether printing notification events on CLI is suppressed."), _("\
> +Show whether printing notification events on CLI is suppressed."), _("\
> +When on, printing notification events (such as inferior/thread switch)\n\
> +on CLI is suppressed."),
> +			   set_suppress_notification_cli,
> +			   show_suppress_notification_cli,
> +			   &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..fadde0eec7f 100644
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -27211,6 +27211,127 @@ inside a cygwin window.
>  Displays whether the debugger is operating in interactive mode or not.
>  @end table
>  
> +@table @code
> +@kindex set suppress-notification-cli
> +@item set suppress-notification-cli
> +If @code{on}, command-line-interface (CLI) notification events that
> +are printed by @value{GDBN} are suppressed.  If @code{off}, the
> +notification events are printed as usual.  The default value is
> +@code{off}.  The CLI notification events occur when you change the
> +selected context or when the program being debugged stops, as detailed
> +below.
> +
> +@noindent
> +@emph{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
> +
> +@noindent
> +When the events are suppressed, the new context is not printed:
> +
> +@smallexample
> +(gdb) set suppress-notification-cli on
> +(gdb) inferior 1
> +(gdb)
> +@end smallexample
> +
> +@noindent
> +@emph{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 event:
> +
> +@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
> +
> +@noindent
> +When the events are suppressed, the output becomes:
> +
> +@smallexample
> +(gdb) break test.c:3
> +Breakpoint 2 at 0x555555555155: file test.c, line 3.
> +(gdb) set suppress-notification-cli on
> +(gdb) continue
> +Continuing.
> +(gdb)
> +@end smallexample
> +
> +@noindent
> +Suppressing CLI notification events may be useful in scripts to obtain
> +a reduced output from a list of commands.  For instance, suppose that
> +you want to add and set up a new inferior using the following
> +commands:
> +
> +@smallexample
> +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
> +@end smallexample
> +
> +@noindent
> +When the CLI notification events are not suppressed, the output is as
> +follows:
> +
> +@smallexample
> +(gdb) do-setup
> +Setting up Inferior 2...
> +[New inferior 2]
> +Added inferior 2 on connection 1 (native)
> +[Switching to inferior 2 [<null>] (/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 5714] (/tmp/test)]
> +[Switching to thread 1.1 (process 5714)]
> +#0  main () at test.c:2
> +2         int a = 1;
> +Done
> +@end smallexample
> +
> +@noindent
> +When suppressed, the output becomes
> +
> +@smallexample
> +(gdb) set suppress-notification-cli 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
> +@end smallexample
> +
> +@kindex show suppress-notification-cli
> +@item show suppress-notification-cli
> +Displays whether printing CLI notification events 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..ea7823a5d58
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/cli-suppress-notification.c
> @@ -0,0 +1,22 @@
> +/* This testcase is part of GDB, the GNU debugger.
> +
> +   Copyright 2020-2022 Free Software Foundation, Inc.

I think the from date is only needed if either (a) you originally
posted this is 2020, or (b) you copied this mostly unchanged from a
file that is already dated 2020.

> +
> +   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 <http://www.gnu.org/licenses/>.  */
> +
> +int
> +main ()
> +{

I'd be tempted to add something else into this function, anything will
do, another function call, or set a global variable or something, then...

> +  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..856a737f238
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/cli-suppress-notification.exp
> @@ -0,0 +1,33 @@
> +# 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 <http://www.gnu.org/licenses/>.
> +
> +# Test the cli-suppress-notification 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 .*" \
> +    "not suppressed"
> +
> +gdb_test_no_output "set suppress-notification-cli on"
> +
> +gdb_test_no_output "inferior 1" "suppressed"

Here you can now easily add a test that something like "next" also has
its output suppressed.

I'd also like to see the tests turn the option back off, and check
that the notifications reappear.

Thanks,
Andrew


> -- 
> 2.33.1
> 
> Intel Deutschland GmbH
> Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
> Tel: +49 89 99 8853-0, www.intel.de <http://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
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH v2 3/3] gdb: add the 'set/show suppress-notification-cli' command
  2022-02-02 15:34   ` Andrew Burgess
@ 2022-02-03  8:28     ` Aktemur, Tankut Baris
  0 siblings, 0 replies; 5+ messages in thread
From: Aktemur, Tankut Baris @ 2022-02-03  8:28 UTC (permalink / raw)
  To: Andrew Burgess, gdb-patches; +Cc: tom, eliz

On Wednesday, February 2, 2022 4:35 PM, Andrew Burgess wrote:
> * Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> [2022-01-20 12:42:52 +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.

> > 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..ea7823a5d58
> > --- /dev/null
> > +++ b/gdb/testsuite/gdb.base/cli-suppress-notification.c
> > @@ -0,0 +1,22 @@
> > +/* This testcase is part of GDB, the GNU debugger.
> > +
> > +   Copyright 2020-2022 Free Software Foundation, Inc.
> 
> I think the from date is only needed if either (a) you originally
> posted this is 2020, or (b) you copied this mostly unchanged from a
> file that is already dated 2020.

The code was posted elsewhere in 2020.  That's why I'll have to keep the
years as 2020-2022.

I acknowledge the other comments and will address them in v3.

Thank you.
-Baris


Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://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


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-02-03  8:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-20 11:42 [PATCH v2 0/3] Suppressing CLI notifications Tankut Baris Aktemur
2022-01-20 11:42 ` [PATCH v2 3/3] gdb: add the 'set/show suppress-notification-cli' command Tankut Baris Aktemur
2022-02-02 15:34   ` Andrew Burgess
2022-02-03  8:28     ` Aktemur, Tankut Baris
2022-02-02 10:55 ` [PATCH v2 0/3] Suppressing CLI notifications Aktemur, Tankut Baris

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).