public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Add "set print finish"
@ 2019-05-29 14:37 Tom Tromey
  0 siblings, 0 replies; only message in thread
From: Tom Tromey @ 2019-05-29 14:37 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=000439d52897541ad00a84026ac471b4f8cb3c97

commit 000439d52897541ad00a84026ac471b4f8cb3c97
Author: Tom Tromey <tromey@adacore.com>
Date:   Wed May 15 13:06:59 2019 -0600

    Add "set print finish"
    
    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.

Diff:
---
 gdb/ChangeLog                     | 11 +++++++++++
 gdb/NEWS                          |  7 +++++++
 gdb/doc/ChangeLog                 |  5 +++++
 gdb/doc/gdb.texinfo               |  9 +++++++++
 gdb/infcmd.c                      | 33 +++++++++++++++++++++++++++++----
 gdb/testsuite/ChangeLog           |  5 +++++
 gdb/testsuite/gdb.base/finish.exp | 16 ++++++++++++++++
 gdb/valprint.c                    |  3 ++-
 gdb/valprint.h                    |  3 +++
 9 files changed, 87 insertions(+), 5 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f122f5b..16c1d0c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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)
diff --git a/gdb/NEWS b/gdb/NEWS
index 6546b72..ab582c0 100644
--- 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
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index c01ef29..c075d74 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -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.
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 3c4535e..f2d8710 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -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
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 178f89e..1dfbe23 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -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);
 }
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index ba657cc..f795ba0 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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.
diff --git a/gdb/testsuite/gdb.base/finish.exp b/gdb/testsuite/gdb.base/finish.exp
index 3bdc5d4..56f3c10 100644
--- a/gdb/testsuite/gdb.base/finish.exp
+++ b/gdb/testsuite/gdb.base/finish.exp
@@ -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
diff --git a/gdb/valprint.c b/gdb/valprint.c
index b9d8878..4c3d67a 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -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.  */
diff --git a/gdb/valprint.h b/gdb/valprint.h
index e5cc947..0bd3f19 100644
--- a/gdb/valprint.h
+++ b/gdb/valprint.h
@@ -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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-05-29 14:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-29 14:37 [binutils-gdb] Add "set print finish" Tom Tromey

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).