This is the mail archive of the gdb@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]

Re: How to load C++ pretty-printers


On 2019-03-16 08:58, Eli Zaretskii wrote:
From: asmwarrior <asmwarrior@gmail.com>
Date: Sat, 16 Mar 2019 20:41:13 +0800

Under My Windows 7 system, I'm using such commands(I put them in a my.gdb script file) to load and register the pretty printers.
I put the libstdcxx folder in the same folder as the my.gdb file.


set auto-load safe-path $debugdir;$datadir/auto-load
python
import sys
sys.path.insert(0, '')
from libstdcxx.v6.printers import register_libstdcxx_printers
# load other pretty printers
end

Thanks, but I don't think I understand which part(s) of this are
necessary in my case.  E.g., is the "set auto-load" command
needed/relevant?  And what is the my.gdb file, I don't think I have
such a file on my system.  The pretty-printers that came with GCC are
installed where the GCC installation puts them, and I'd prefer not to
change that if possible.

Also, which of the commands you've shown actually loads the
pretty-printers from their file?

Thanks again for your response.

If it can help, I have something similar to that in my .gdbinit (whereas asmwarrior has put the same content in a separate file, my.gdb, which they then source by hand).

When libstdc++ is linked dynamically with a program and you debug that program, GDB will "auto-load" the file corresponding to the libstdc++ shared library. In my case, it's at "/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.25-gdb.py". This file tries to find where the GCC-provided libstdc++ pretty printers are installed, and adds this path to the Python import path. It then calls register_libstdcxx_printers, a function provided by the libstdc++ pretty printers.

When libstdc++ is linked statically, the auto-load does not happen, as you mentioned. So the idea here is to replicate what the auto-load script does, but by hand.

In my case, I have these lines to adjust the Python import path to add GCC's pretty printers directory:

  python import sys
  python sys.path.insert(0, '/usr/share/gcc-8.2.1/python')

And then I manually trigger the GDB auto-load script, that would normally be sourced automatically when loading the libstdc++ shared lib:

  source /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.25-gdb.py

The "set auto-load safe-path" line is to define it is safe to auto-load things from. If you are missing something, you should know quickly enough, as GDB will print you a warning, saying it didn't auto-load X, because X is not in a safe path (as well as information about how to adjust it).

Hope this helps,

Simon


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