Re: How to load C++ pretty-printers

Philippe Waroquiers <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On Sun, 2019-03-17 at 17:30 +0200, Eli Zaretskii wrote:
> > From: Philippe Waroquiers <[email protected]>
> > Cc: Eli Zaretskii <[email protected]>, Simon Marchi <[email protected]>, 
> > 	[email protected]
> > Date: Sun, 17 Mar 2019 13:39:52 +0100
> > 
> > But then:
> >     p current_program_space->added_solibs[0]
> >     One of the arguments you tried to pass to operator[] could not be converted to what
> >     the function wants.
> > (why is then GDB not telling me what the function wants ?).
> > I am finally doing
> >    p (*(struct so_list*)0x56275a765a60)
> > 
> > But that all looks like a 'backward' user experience:
> 
> Is that a problem with GDB or with the pretty-printer?  If the latter,
> it might be worth telling this to the GCC folks.
I think it is a GDB problem: same behaviour with pretty printers
disabled:

(top-gdb) p current_program_space->added_solibs
$4 = {<std::_Vector_base<so_list*, std::allocator<so_list*> >> = {
    _M_impl = {<std::allocator<so_list*>> = {<__gnu_cxx::new_allocator<so_list*>> = {<No
data fields>}, <No data fields>}, _M_start = 0x563c90cb1140, 
      _M_finish = 0x563c90cb1190, 
      _M_end_of_storage = 0x563c90cb11c0}}, <No data fields>}
(top-gdb) p current_program_space->added_solibs[0]
One of the arguments you tried to pass to operator[] could not be converted to what the
function wants.
(top-gdb) 

Another strange thing in this area: with pretty printers disabled,
 doing
  ptype current_program_space->added_solibs
gives first a python error:
Python Exception <class 'gdb.error'> No type named so_list*.: 
type = class std::vector<so_list*, std::allocator<so_list*> > 
    [with _Tp = so_list *, _Alloc = std::allocator<so_list*>] 

while ptype so_list*
tells it is a known type:
(top-gdb) ptype so_list*
type = struct so_list {
    so_list *next;
    lm_info_base *lm_info;
    char so_original_name[512];
    char so_name[512];
    program_space *pspace;
    bfd *abfd;
    char symbols_loaded;
    objfile *objfile;
    target_section *sections;
    target_section *sections_end;
    CORE_ADDR addr_low;
    CORE_ADDR addr_high;
} *

That also looks like a GDB problem
(maybe ptype is missing the logic to consider so_list as
a struct ?).

Maybe there is a link between the 2 problems ?

Philippe
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.