Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: gdb-patches@sourceware.org
Subject: [RFC] Change "set print frame-arguments"'s default to scalars
Date: Tue, 24 Mar 2009 21:40:00 -0000	[thread overview]
Message-ID: <20090324212730.GU9472@adacore.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 2477 bytes --]

This is a slight change in behavior that we made at AdaCore which
everyone seemed to have enjoyed.  The proposal is to change the default
for "set print frame-arguments" to "scalars" in order to unclutter
frames a bit.  For instance, I found the following example in our
testsuite. The debugger hit a breakpoing inside a function where
some of the arguments are structs. It looks like this:

> Breakpoint 7, sum_array_print (seed=10, linked_list1={next_index = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, values = {4, 6, 8, 10, 12, 14, 16, 18, 20, 22}, head = 0}, linked_list2={next_index = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, values = {8, 10, 12, 14, 16, 18, 20, 22, 24, 26}, head = 0}, linked_list3={next_index = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, values = {10, 12, 14, 16, 18, 20, 22, 24, 26, 28}, head = 0}, linked_list4={next_index = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, values = {20, 22, 24, 26, 28, 30, 32, 34, 36, 38}, head = 0}) at /home/brobecke/act/gdb-public/gdb/testsuite/gdb.base/call-ar-st.c:1105^M

(you should see what the above looks like when it's inside a backtrace)

The idea is that, most of the time, people are mostly interested
in knowing the name of the function where they stopped, and don't
care (yet!) about the value for their parameters. So simplifying
the output above to the following should be more productive most
of the time:

> Breakpoint 7, sum_array_print (seed=10, linked_list1=..., linked_list2=..., linked_list3=..., linked_list4=...) at /home/brobecke/act/gdb-public/gdb/testsuite/gdb.base/call-ar-st.c:1105^M

If the user needs to know the value of one of the non-scalar parameters,
he needs to use "print". From my personal experience, even if the parameter
value was printed in the frame, the frame is so cluttered at this point
that I would manaully get the parameter value with a print anyway.

To put things back into perspective, I think it's relatively uncommon
to pass structs by argument unless they are small. When bigger, I suspect
that the typical approach is to pass its address. So I don't think
this change would impact C users much. I'm not sure about C++, in particular
I'm not sure about how classes/objects are passed. I guess references,
which probably means little impact as well. In Ada, however, passing
structs as arguments is a common idiom, and changing the default seems
to have improved the life of many developers. I suspect that the same
will be true of Pascal users, but I can't say for sure.

Yay? Nay?

Thanks,
-- 
Joel

[-- Attachment #2: frame-args-scalars.diff --]
[-- Type: text/x-diff, Size: 718 bytes --]

commit ab83cdc6d0d12c1fcfd718e8c81038be77f02491
Author: Joel Brobecker <brobecker@adacore.com>
Date:   Tue Mar 24 14:10:08 2009 -0700

        Change the default value for "set print frame-arguments" to scalars.
    
        * stack.c (print_frame_arguments): Set initial value to "scalars".

diff --git a/gdb/stack.c b/gdb/stack.c
index f185841..814e271 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -58,7 +58,7 @@ void (*deprecated_selected_frame_level_changed_hook) (int);
 
 static const char *print_frame_arguments_choices[] =
   {"all", "scalars", "none", NULL};
-static const char *print_frame_arguments = "all";
+static const char *print_frame_arguments = "scalars";
 
 /* Prototypes for local functions. */
 

             reply	other threads:[~2009-03-24 21:27 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-24 21:40 Joel Brobecker [this message]
2009-03-25  0:10 ` Tom Tromey
2009-03-25 21:44 ` Thiago Jung Bauermann
2009-03-27 17:34 ` Tom Tromey
2009-03-31 20:42   ` Doug Evans
2009-04-01 22:11 ` Joel Brobecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090324212730.GU9472@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox