Re: How to load C++ pretty-printers
Simon Marchi <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
On 2019-03-16 08:58, Eli Zaretskii wrote: >> From: asmwarrior <[email protected]> >> 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