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