Add "set print finish"
authorTom Tromey <tromey@adacore.com>
Wed, 15 May 2019 19:06:59 +0000 (13:06 -0600)
committerTom Tromey <tromey@adacore.com>
Wed, 29 May 2019 14:25:38 +0000 (08:25 -0600)
A user wanted to be able to disable the display of the value when
using "finish" -- but still have the value entered into the value
history in case it was useful later on.  Part of the rationale here is
that sometimes the value might be quite large, or expensive to display
(in their case this was compounded by a rogue pretty-printer).

This patch implements this idea.

gdb/ChangeLog
2019-05-29  Tom Tromey  <tromey@adacore.com>

* NEWS: Add entry.
* infcmd.c (print_return_value_1): Handle finish_print
option.
(show_print_finish): New function.
(_initialize_infcmd): Add "set/show print finish" commands.
* valprint.c (user_print_options): Initialize new member.
* valprint.h (struct value_print_options) <finish_print>: New
member.

gdb/doc/ChangeLog
2019-05-29  Tom Tromey  <tromey@adacore.com>

* gdb.texinfo (Continuing and Stepping): Document new
commands.

gdb/testsuite/ChangeLog
2019-05-29  Tom Tromey  <tromey@adacore.com>

* gdb.base/finish.exp (finish_no_print): New proc.
(finish_tests): Call it.

gdb/ChangeLog
gdb/NEWS
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/infcmd.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/finish.exp
gdb/valprint.c
gdb/valprint.h

index f122f5b21f56a643fea6dddbe0f6d95167b1ec3e..16c1d0c844e9481b8568e82a900a54a9e2c869ef 100644 (file)
@@ -1,3 +1,14 @@
+2019-05-29  Tom Tromey  <tromey@adacore.com>
+
+       * NEWS: Add entry.
+       * infcmd.c (print_return_value_1): Handle finish_print
+       option.
+       (show_print_finish): New function.
+       (_initialize_infcmd): Add "set/show print finish" commands.
+       * valprint.c (user_print_options): Initialize new member.
+       * valprint.h (struct value_print_options) <finish_print>: New
+       member.
+
 2019-05-28  Tom Tromey  <tromey@adacore.com>
 
        * ada-lang.c (ada_remove_Xbn_suffix)
index 6546b7243a9efd25a8dbd9010dd024e53917857e..ab582c036dcf32050144480f4b75ee93e61cbd0c 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -39,6 +39,13 @@ show may-call-functions
   an error when a command (such as print expression) calls a function
   in the program.
 
+set print finish [on|off]
+show print finish
+  This controls whether the `finish' command will display the value
+  that is returned by the current function.  When `off', the value is
+  still entered into the value history, but it is not printed.  The
+  default is `on'.
+
 set print max-depth
 show print max-depth
   Allows deeply nested structures to be simplified when printing by
index c01ef292e94b5059372f83e18b3e25e582967576..c075d74eec81e1a6f9d227f97ae452545de5c15d 100644 (file)
@@ -1,3 +1,8 @@
+2019-05-29  Tom Tromey  <tromey@adacore.com>
+
+       * gdb.texinfo (Continuing and Stepping): Document new
+       commands.
+
 2019-05-22  Alan Hayward  <alan.hayward@arm.com>
 
        * gdb.texinfo (Shell Commands): Add debugredirect.
index 3c4535ec506993832d7c04011132d814aca575cd..f2d8710d7dc27693d80a97ca98aebd3d2cd4eab0 100644 (file)
@@ -5599,6 +5599,15 @@ abbreviated as @code{fin}.
 Contrast this with the @code{return} command (@pxref{Returning,
 ,Returning from a Function}).
 
+@kindex set print finish
+@kindex show print finish
+@item set print finish @r{[}on|off@r{]}
+@itemx show print finish
+By default the @code{finish} command will show the value that is
+returned by the function.  This can be disabled using @code{set print
+finish off}.  When disabled, the value is still entered into the value
+history (@pxref{Value History}), but not displayed.
+
 @kindex until
 @kindex u @r{(@code{until})}
 @cindex run until specified location
index 178f89e95207f9da1ec229f7f1974305e329face..1dfbe2329b7e8649c8c9f4cfdbe7662cb723babe 100644 (file)
@@ -1621,10 +1621,14 @@ print_return_value_1 (struct ui_out *uiout, struct return_value_info *rv)
       uiout->text (" = ");
       get_user_print_options (&opts);
 
-      string_file stb;
-
-      value_print (rv->value, &stb, &opts);
-      uiout->field_stream ("return-value", stb);
+      if (opts.finish_print)
+       {
+         string_file stb;
+         value_print (rv->value, &stb, &opts);
+         uiout->field_stream ("return-value", stb);
+       }
+      else
+       uiout->field_string ("return-value", _("<not displayed>"));
       uiout->text ("\n");
     }
   else
@@ -3096,6 +3100,19 @@ info_proc_cmd_all (const char *args, int from_tty)
   info_proc_cmd_1 (args, IP_ALL, from_tty);
 }
 
+/* Implement `show print finish'.  */
+
+static void
+show_print_finish (struct ui_file *file, int from_tty,
+                  struct cmd_list_element *c,
+                  const char *value)
+{
+  fprintf_filtered (file, _("\
+Printing of return value after `finish' is %s.\n"),
+                   value);
+}
+
+
 /* This help string is used for the run, start, and starti commands.
    It is defined as a macro to prevent duplication.  */
 
@@ -3420,4 +3437,12 @@ List files opened by the specified process."),
   add_cmd ("all", class_info, info_proc_cmd_all, _("\
 List all available info about the specified process."),
           &info_proc_cmdlist);
+
+  add_setshow_boolean_cmd ("finish", class_support,
+                          &user_print_options.finish_print, _("\
+Set whether `finish' prints the return value."), _("\
+Show whether `finish' prints the return value."), NULL,
+                          NULL,
+                          show_print_finish,
+                          &setprintlist, &showprintlist);
 }
index ba657cc6158e54759f9e4855797fb1500e466f7f..f795ba0c8c6d1550f2bd1dedbafa7edb2b6febfd 100644 (file)
@@ -1,3 +1,8 @@
+2019-05-29  Tom Tromey  <tromey@adacore.com>
+
+       * gdb.base/finish.exp (finish_no_print): New proc.
+       (finish_tests): Call it.
+
 2019-05-24  Tom de Vries  <tdevries@suse.de>
 
        * gdb.dwarf2/gdb-add-index.exp: New file.
index 3bdc5d4726ed0dfe8894095a7f6977085a44e6d1..56f3c10e3f087c170c416c9fbc57500f62c9f065 100644 (file)
@@ -86,6 +86,21 @@ proc finish_abbreviation { abbrev } {
              "Testing the \"$abbrev\" abbreviation for \"finish\""
 }
 
+# Test "set print finish off".
+proc finish_no_print {} {
+    global decimal
+
+    if {![runto "int_func"]} {
+       untested "couldn't run to main"
+       return
+    }
+    gdb_test_no_output "set print finish off"
+    gdb_test "finish" \
+       "Value returned is \\\$$decimal = <not displayed>"
+    gdb_test "print \$" " = 1" \
+       "Ensure return value was properly saved"
+}
+
 proc finish_tests { } {
     global gdb_prompt skip_float_test
 
@@ -105,6 +120,7 @@ proc finish_tests { } {
        finish_1 "double"
     }
     finish_abbreviation "fin"
+    finish_no_print
 }
 
 set prev_timeout $timeout
index b9d8878c8e44f25e707d97ff4da9dcaa59294551..4c3d67a9ff80fdada56690741a27e870585c1806 100644 (file)
@@ -111,7 +111,8 @@ struct value_print_options user_print_options =
   0,                           /* raw */
   0,                           /* summary */
   1,                           /* symbol_print */
-  PRINT_MAX_DEPTH_DEFAULT      /* max_depth */
+  PRINT_MAX_DEPTH_DEFAULT,     /* max_depth */
+  1                            /* finish_print */
 };
 
 /* Initialize *OPTS to be a copy of the user print options.  */
index e5cc9477987f9ee85b897b83ca9c357657172cf8..0bd3f1966c493101929a6d6457546b850e7a26d0 100644 (file)
@@ -95,6 +95,9 @@ struct value_print_options
 
   /* Maximum print depth when printing nested aggregates.  */
   int max_depth;
+
+  /* Whether "finish" should print the value.  */
+  int finish_print;
 };
 
 /* The global print options set by the user.  In general this should