[patch] Add libstdc++ type printers for class templates

Jonathan Wakely jwakely@redhat.com
Mon Jul 14 19:22:00 GMT 2014


On 14/07/14 15:21 +0100, Jonathan Wakely wrote:
>This defines a new style of Python type printer that recognizes
>templates and can be used to omit default template arguments from the
>typename GDB prints, e.g. showing std::vector<T, std::allocator<T>> as
>simply std::vector<T>.  Additionally, T will get processed by the type
>recognizers so if it's a standard typedef or template it will also get
>displayed in its abbreviated form.
>
>e.g. with current trunk:
>
>Breakpoint 1, main () at p.cc:45
>45        std::vector<std::deque<std::list<int>>> nested;
>(gdb) whatis nested
>type = std::vector<std::deque<std::list<int, std::allocator<int> >, std::allocator<std::list<int, std::allocator<int> > > >, std::allocator<std::deque<std::list<int, std::allocator<int> >, std::allocator<std::list<int, std::allocator<int> > > > > >
>
>and with this patch:
>
>(gdb) whatis nested
>type = std::vector<std::deque<std::list<int>>>
>
>N.B. I am not printing spaces between the closing angle brackets. If
>people prefer I can put them in, or only do it for C++11 types, so
>that copying and pasting types from GDB will always work (if you're
>copying a C++11 type then you must be planning to use it with a C++11
>compiler, which will handle >> without spaces).
>
>This passes the python testsuite but I'll wait for comments before
>committing, in case my use of the GDB API or Python can be improved by
>anyone.

I forgot to say that with these type recognizers we might want to
revisit the output of the existing printers for the containers, so
that instead of:

  std::map with 3 elements = { ... }

GDB could print the map type:

  std::map<int, int> with 3 elements = { ... }



More information about the Libstdc++ mailing list