diff options
-rw-r--r-- | gdb/NEWS | 8 | ||||
-rw-r--r-- | gdb/cli/cli-cmds.c | 39 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 69 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/cli-suppress-notification.c | 26 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/cli-suppress-notification.exp | 39 |
5 files changed, 181 insertions, 0 deletions
@@ -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 1515679..31d398c 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 2073d92..8e7fb2d 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 0000000..243dbc9 --- /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 <http://www.gnu.org/licenses/>. */ + +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 0000000..1e4cc98 --- /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 <http://www.gnu.org/licenses/>. + +# 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" |