[Libreoffice] gdb pretty printers landed in master

David Tardon dtardon at redhat.com
Thu Aug 25 01:41:02 PDT 2011


Hi all,

as the subject says, I pushed my gdb pretty printers into master.


== What is it? ==

gdb 7 includes support for scripting in Python, which, among other
useful things, allows to write pretty printers for arbitrary data types
(did you ever wish that rtl::OString be shown like a string? Your wish
has come true :)


== What is there? ==

We have pretty printers for, e.g., the following:
* rtl and tools' strings
* some tools' types like Date, Time, BigInt...
* UNO stuff, like Any or Sequence
* some other, probably less useful, stuff, like SvArray


== How do I use it? ==

First thing, you need gdb 7.x with enabled support for python.
Everything should work with gdb 7.0, but I suggest using at least 7.2,
as there are some really nice improvements there. Then it depends on
what do you want to use it for:

1. for devel. installation

The pretty printers are activated automatically on make dev-install,
unless smoketest failed. You can always (re)activate them by running

install-gdb-printers -a "$SOLARVER/$INPATH/installation/opt" -L

in build env. (The install-gdb-printers script is probably going to
change yet, but the arguments should stay the same.)

2. for arbitrary installation

It is possible (or it should be possible :) to use the
install-gdb-printers script to create auto-loaders (see the next
section) in arbitrary installation directory. If you don't want to do
that for any reason, it is still possible to load the pretty printers
unconditionally. Just add the following snippet to your ~/.gdbinit :

python
import os.path
import sys

import gdb

pythondir = '/path/to/build/solenv/gdb'

if pythondir not in sys.path:
    sys.path.insert(0, pythondir)

from libreoffice import cppu, sal, svl, sw, tl

cppu.register_pretty_printers(gdb.current_objfile())
# ... the same for sal, svl, sw and tl

end


== How does it work? ==

To make it as easy to use as possible with devel. installations (i.e.,
without any set up required of the developer), the pretty printers are
split by libraries and auto-loaders are used to load them into gdb. An
auto-loader is just a python file that sits next to the library it loads
pretty printers for, with the same name as the library plus -gdb.py
suffix. The auto-loaders are created (from solenv/gdb/autoload.template)
by install-gdb-printers script, which is run as part of make dev-install.

(There is actually even simpler way to associate a pretty printer file
with a library, through special section .debug_gdb_scripts, but that is
only available from gdb 7.2 up.)



More information about the LibreOffice mailing list