This is the mail archive of the
mailing list for the GDB project.
Re: How to load C++ pretty-printers
On 2019-03-16 08:58, Eli Zaretskii wrote:
From: asmwarrior <firstname.lastname@example.org>
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
from libstdcxx.v6.printers import register_libstdcxx_printers
# load other pretty printers
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
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
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:
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
Hope this helps,