From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25379 invoked by alias); 7 Sep 2019 11:42:11 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 25370 invoked by uid 89); 7 Sep 2019 11:42:11 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.5 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.1 spammy=pretty-printed, 1993 X-HELO: mailsec106.isp.belgacom.be Received: from mailsec106.isp.belgacom.be (HELO mailsec106.isp.belgacom.be) (195.238.20.102) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 07 Sep 2019 11:42:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skynet.be; i=@skynet.be; q=dns/txt; s=securemail; t=1567856529; x=1599392529; h=message-id:subject:from:to:date:in-reply-to:references: mime-version:content-transfer-encoding; bh=mraY1oPndyry8rscR0OJJ3XRAJAI82imkbcuiyObMpk=; b=Xpcgy3lxBgB6w/VsoUli1E+KxL3ljkLV8GSwAOo4UFhxf5Kr6mfpsvlI kFcR2D5aBQ6jirWbdXfBDxyyvzOFHQ==; Received: from 255.38-242-81.adsl-dyn.isp.belgacom.be (HELO md) ([81.242.38.255]) by relay.skynet.be with ESMTP/TLS/AES256-GCM-SHA384; 07 Sep 2019 13:42:07 +0200 Message-ID: <4e4b4aa3b7217ced00315a4de3427f668f3b8f2e.camel@skynet.be> Subject: PING Re: [RFA] Implement 'print -raw-values' and 'set print raw-values on|off' From: Philippe Waroquiers To: gdb-patches@sourceware.org Date: Sat, 07 Sep 2019 11:42:00 -0000 In-Reply-To: <20190807193924.32268-1-philippe.waroquiers@skynet.be> References: <20190807193924.32268-1-philippe.waroquiers@skynet.be> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.30.5-1.1 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2019-09/txt/msg00107.txt.bz2 Ping. Thanks Philippe On Wed, 2019-08-07 at 21:39 +0200, Philippe Waroquiers wrote: > The option framework documentation was speaking about a 'print -raw' > option, but this option does not exist. > > This patch implements -raw-values option that tells to ignore the > active pretty printers when printing a value. > As we already have -raw-frame-arguments, I thought -raw-values > was more clear, in particular to differentiate > set print raw-values and set print raw-frame-arguments. > > gdb/doc/ChangeLog > 2019-08-07 Philippe Waroquiers > > * gdb.texinfo (Command Options): Use -p and -pretty in the example, > as -r is ambiguous. Update the print - TAB TAB completion result. > (Data): Document new option -raw-values. Use -p and -pretty in the > example, as -r is ambiguous. > (Print Settings): Document set print raw values. > (Pretty-Printer Commands): Document interaction between enabled > pretty printers and -raw-values/-raw-frame-arguments. > > gdb/ChangeLog > 2019-08-07 Philippe Waroquiers > > * NEWS: Document -raw-values option and the related setting commands. > * printcmd.c (print_command_parse_format): Do not set opts->raw off, > only set it on when /r is given. > * valprint.c (value_print_option_defs): New element raw-values. > * Makefile.in: Add the new file. > > 2019-08-07 Philippe Waroquiers > > * gdb.base/options.exp: Add -raw-values in the print completion list. > * gdb.python/py-prettyprint.exp: Add tests for -raw-values. > --- > gdb/NEWS | 11 ++++- > gdb/doc/gdb.texinfo | 51 +++++++++++++++++---- > gdb/printcmd.c | 6 ++- > gdb/testsuite/gdb.base/options.exp | 1 + > gdb/testsuite/gdb.python/py-prettyprint.exp | 10 ++++ > gdb/valprint.c | 10 ++++ > 6 files changed, 75 insertions(+), 14 deletions(-) > > diff --git a/gdb/NEWS b/gdb/NEWS > index fa01adf6e8..8f27b102ea 100644 > --- a/gdb/NEWS > +++ b/gdb/NEWS > @@ -101,6 +101,12 @@ show print max-depth > The default max-depth is 20, but this can be set to unlimited to get > the old behavior back. > > +set print raw-values [on|off] > +show print raw-values > + By default, GDB applies the enabled pretty printers when printing a > + value. This allows to ignore the enabled pretty printers for a series > + of commands. The default is 'off'. > + > set logging debugredirect [on|off] > By default, GDB debug output will go to both the terminal and the logfile. > Set if you want debug output to go only to the log file. > @@ -200,6 +206,7 @@ maint show test-options-completion-result > -null-stop [on|off] > -object [on|off] > -pretty [on|off] > + -raw-values [on|off] > -repeats NUMBER|unlimited > -static-members [on|off] > -symbol [on|off] > @@ -244,11 +251,11 @@ maint show test-options-completion-result > "on" if omitted. This allows writing compact command invocations, > like for example: > > - (gdb) p -r -p -o 0 -- *myptr > + (gdb) p -ra -p -o 0 -- *myptr > > The above is equivalent to: > > - (gdb) print -raw -pretty -object off -- *myptr > + (gdb) print -raw-values -pretty -object off -- *myptr > > ** The "info types" command now supports the '-q' flag to disable > printing of some header information in a similar fashion to "info > diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo > index 7f8c0aff1c..f65f8b1764 100644 > --- a/gdb/doc/gdb.texinfo > +++ b/gdb/doc/gdb.texinfo > @@ -1936,8 +1936,8 @@ Some commands take raw input as argument. For example, the print > command processes arbitrary expressions in any of the languages > supported by @value{GDBN}. With such commands, because raw input may > start with a leading dash that would be confused with an option or any > -of its abbreviations, e.g.@: @code{print -r} (short for @code{print > --raw} or printing negative @code{r}?), if you specify any command > +of its abbreviations, e.g.@: @code{print -p} (short for @code{print > +-pretty} or printing negative @code{p}?), if you specify any command > option, then you must use a double-dash (@code{--}) delimiter to > indicate the end of options. > > @@ -1963,10 +1963,10 @@ on @code{-} after the command name. For example: > > @smallexample > (@value{GDBP}) print -@key{TAB}@key{TAB} > --address -max-depth -repeats -vtbl > --array -null-stop -static-members > --array-indexes -object -symbol > --elements -pretty -union > +-address -max-depth -raw-values -union > +-array -null-stop -repeats -vtbl > +-array-indexes -object -static-members > +-elements -pretty -symbol > @end smallexample > > Completion will in some cases guide you with a suggestion of what kind > @@ -9541,6 +9541,11 @@ Set printing C@t{++} virtual function tables. Related setting: > Set pretty formatting of structures. Related setting: @ref{set print > pretty}. > > +@item -raw-values [@code{on}|@code{off}] > +Set whether to print values in raw form, bypassing any > +pretty-printers for that value. Related setting: @ref{set print > +raw-values}. > + > @item -repeats @var{number-of-repeats}|@code{unlimited} > Set threshold for repeated print elements. @code{unlimited} causes > all elements to be individually printed. Related setting: @ref{set > @@ -9568,17 +9573,17 @@ may look like options (including abbreviations), if you specify any > command option, then you must use a double dash (@code{--}) to mark > the end of option processing. > > -For example, this prints the value of the @code{-r} expression: > +For example, this prints the value of the @code{-p} expression: > > @smallexample > -(@value{GDBP}) print -r > +(@value{GDBP}) print -p > @end smallexample > > While this repeats the last value in the value history (see below) > -with the @code{-raw} option in effect: > +with the @code{-pretty} option in effect: > > @smallexample > -(@value{GDBP}) print -r -- > +(@value{GDBP}) print -p -- > @end smallexample > > Here is an example including both on option and an expression: > @@ -11169,6 +11174,20 @@ This is the default format. > @item show print pretty > Show which format @value{GDBN} is using to print structures. > > +@anchor{set print raw-values} > +@item set print raw-values on > +Print values in raw form, without applying the pretty > +printers for the value. > + > +@item set print raw-values off > +Print values in pretty-printed form, if there is a pretty-printer > +for the value (@pxref{Pretty Printing}), > +otherwise print the value in raw form. > +This is the default. > + > +@item show print raw-values > +Show whether to print values in raw form. > + > @item set print sevenbit-strings on > @cindex eight-bit characters in strings > @cindex octal escapes in strings > @@ -11508,6 +11527,18 @@ library2.so: > Note that for @code{bar} the entire printer can be disabled, > as can each individual subprinter. > > +Printing values and frame arguments is done by default using > +the enabled pretty printers. > + > +The print option @code{-raw-values} and @value{GDBN} setting @xref{set > +print raw-values} can be used to print values without applying the > +enabled pretty printers. > + > +Similarly, the backtrace option @code{-raw-frame-arguments} and > +@value{GDBN} setting @xref{set print raw-frame-arguments} can be used > +to ignore the enabled pretty printers when printing frame argument > +values > + > @node Value History > @section Value History > > diff --git a/gdb/printcmd.c b/gdb/printcmd.c > index 7529842e73..9c3982338a 100644 > --- a/gdb/printcmd.c > +++ b/gdb/printcmd.c > @@ -1142,6 +1142,9 @@ print_command_parse_format (const char **expp, const char *cmdname, > { > const char *exp = *expp; > > + /* opts->raw value might already have been set by 'set print raw-values' > + or by using 'print -raw-values'. > + So, do not set opts->raw to 0, only set it to 1 if /r is given. */ > if (exp && *exp == '/') > { > format_data fmt; > @@ -1152,12 +1155,11 @@ print_command_parse_format (const char **expp, const char *cmdname, > last_format = fmt.format; > > opts->format = fmt.format; > - opts->raw = fmt.raw; > + opts->raw = opts->raw || fmt.raw; > } > else > { > opts->format = 0; > - opts->raw = 0; > } > > *expp = exp; > diff --git a/gdb/testsuite/gdb.base/options.exp b/gdb/testsuite/gdb.base/options.exp > index 7a18fe936b..78ddc26577 100644 > --- a/gdb/testsuite/gdb.base/options.exp > +++ b/gdb/testsuite/gdb.base/options.exp > @@ -168,6 +168,7 @@ proc_with_prefix test-print {{prefix ""}} { > "-null-stop" > "-object" > "-pretty" > + "-raw-values" > "-repeats" > "-static-members" > "-symbol" > diff --git a/gdb/testsuite/gdb.python/py-prettyprint.exp b/gdb/testsuite/gdb.python/py-prettyprint.exp > index 82e7e65031..3d88f7e9f2 100644 > --- a/gdb/testsuite/gdb.python/py-prettyprint.exp > +++ b/gdb/testsuite/gdb.python/py-prettyprint.exp > @@ -199,3 +199,13 @@ gdb_test_no_output "python enable_lookup_function ()" > > gdb_test "print ss" " = a=< a=<1> b=<$hex>> b=< a=<2> b=<$hex>>" \ > "print ss enabled #2" > + > +gdb_test "print -raw-values -- ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \ > + "print -raw-values -- ss" > + > +gdb_test "print -raw-values on -- ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \ > + "print -raw-values on -- ss" > + > +gdb_test "with print raw-values -- print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \ > + "with print raw-values -- print ss" > + > diff --git a/gdb/valprint.c b/gdb/valprint.c > index e5b28f3ee9..96e8ff6dca 100644 > --- a/gdb/valprint.c > +++ b/gdb/valprint.c > @@ -3192,6 +3192,16 @@ Use \"unlimited\" to print the complete structure.") > NULL, /* help_doc */ > }, > > + boolean_option_def { > + "raw-values", > + [] (value_print_options *opt) { return &opt->raw; }, > + NULL, /* show_cmd_cb */ > + N_("Set whether to print values in raw form."), > + N_("Show whether to print values in raw form."), > + N_("If set, values are printed in raw form, bypassing any\n\ > +pretty-printers for that value.") > + }, > + > uinteger_option_def { > "repeats", > [] (value_print_options *opt) { return &opt->repeat_count_threshold; },