diff options
author | Keith Seitz <keiths@redhat.com> | 2017-12-07 15:01:30 -0800 |
---|---|---|
committer | Keith Seitz <keiths@redhat.com> | 2017-12-07 15:01:30 -0800 |
commit | 883fd55ab1049333364479a7f5b0c7e61a310bac (patch) | |
tree | 7e62acd5cb4951e9b8faf934771e6c7a65b169c7 /gdb/doc | |
parent | ec72db3ef415ebdcedaf36a1d83bd6624ec063e0 (diff) | |
download | gdb-883fd55ab1049333364479a7f5b0c7e61a310bac.zip gdb-883fd55ab1049333364479a7f5b0c7e61a310bac.tar.gz gdb-883fd55ab1049333364479a7f5b0c7e61a310bac.tar.bz2 |
Record nested types
GDB currently does not track types defined in classes. Consider:
class A
{
public:
class B
{
public:
class C { };
};
};
(gdb) ptype A
type = class A {
<no data fields>
}
This patch changes this behavior so that GDB records these nested types
and displays them to the user when he has set the (new) "print type"
option "nested-type-limit."
Example:
(gdb) set print type nested-type-limit 1
(gdb) ptype A
type = class A {
<no data fields>
class A::B {
<no data fields>
};
}
(gdb) set print type nested-type-limit 2
type = class A {
<no data fields>
class A::B {
<no data fields>
class A::B::C {
<no data fields>
};
};
}
By default, the code maintains the status quo, that is, it will not print
any nested type definitions at all.
Testing is carried out via cp_ptype_class which required quite a bit of
modification to permit recursive calling (for the nested types). This
was most easily facilitated by turning the ptype command output into a
queue. Upshot: the test suite now has stack and queue data structures that
may be used by test writers.
gdb/ChangeLog
* NEWS (New commands): Mention set/show print type nested-type-limit.
* c-typeprint.c (c_type_print_base): Print out nested types.
* dwarf2read.c (struct typedef_field_list): Rename to ...
(struct decl_field_list): ... this. Change all uses.
(struct field_info) <nested_types_list, nested_types_list_count>:
New fields.
(add_partial_symbol): Look for nested type definitions in C++, too.
(dwarf2_add_typedef): Rename to ...
(dwarf2_add_type_defn): ... this.
(type_can_define_types): New function.
Update assertion to use type_can_define_types.
Permit NULL for a field's name.
(process_structure_scope): Handle child DIEs of types that can
define types.
Copy the list of nested types into the type struct.
* gdbtypes.h (struct typedef_field): Rename to ...
(struct decl_field): ... this. Change all uses.
[is_protected, is_private]: New fields.
(struct cplus_struct_type) <nested_types, nested_types_count>: New
fields.
(TYPE_NESTED_TYPES_ARRAY, TYPE_NESTED_TYPES_FIELD)
(TYPE_NESTED_TYPES_FIELD_NAME, TYPE_NESTED_TYPES_FIELD_TYPE)
(TYPE_NESTED_TYPES_COUNT, TYPE_NESTED_TYPES_FIELD_PROTECTED)
(TYPE_NESTED_TYPES_FIELD_PRIVATE): New macros.
* typeprint.c (type_print_raw_options, default_ptype_flags): Add
default value for print_nested_type_limit.
(print_nested_type_limit): New static variable.
(set_print_type_nested_types, show_print_type_nested_types): New
functions.
(_initialize_typeprint): Register new commands for set/show
`print-nested-type-limit'.
* typeprint.h (struct type_print_options) [print_nested_type_limit]:
New field.
gdb/testsuite/ChangeLog
* gdb.cp/nested-types.cc: New file.
* gdb.cp/nested-types.exp: New file.
* lib/cp-support.exp: Load data-structures.exp library.
(debug_cp_test_ptype_class): New global.
(cp_ptype_class_verbose, next_line): New procedures.
(cp_test_ptype_class): Add and document new parameter `recursive_qid'.
Add and document new return value.
Switch the list of lines to a queue.
Add support for new `type' key for nested type definitions.
Add debugging/troubleshooting messages.
* lib/data-structures.exp: New file.
gdb/doc/ChangeLog
* gdb.texinfo (Symbols): Document "set print type nested-type-limit"
and "show print type nested-type-limit".
Diffstat (limited to 'gdb/doc')
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 13 |
2 files changed, 18 insertions, 0 deletions
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 419efc4..df294d6 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2017-12-07 Keith Seitz <keiths@redhat.com> + + * gdb.texinfo (Symbols): Document "set print type nested-type-limit" + and "show print type nested-type-limit". + 2017-12-07 Phil Muldoon <pmuldoon@redhat.com> * python.texi (Breakpoints In Python): Add text relating diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 3b251c6..1e4ef98 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -17071,6 +17071,19 @@ cause @value{GDBN} to omit the methods. This command shows the current setting of method display when printing classes. +@kindex set print type nested-type-limit +@item set print type nested-type-limit @var{limit} +@itemx set print type nested-type-limit unlimited +Set the limit of displayed nested types that the type printer will +show. A @var{limit} of @code{unlimited} or @code{-1} will show all +nested definitions. By default, the type printer will not show any nested +types defined in classes. + +@kindex show print type nested-type-limit +@item show print type nested-type-limit +This command shows the current display limit of nested types when +printing classes. + @kindex set print type typedefs @item set print type typedefs @itemx set print type typedefs on |