This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC] Change "set print frame-arguments"'s default to scalars


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
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. */
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]