Next: , Previous: Guile Pretty Printing API, Up: Guile API


23.3.3.9 Selecting Guile Pretty-Printers

The Guile list *pretty-printers* contains a set of <gdb:pretty-printer> registered objects. Printers in this list are called global printers, they're available when debugging any inferior. In addition to this, each <gdb:objfile> object contains its own set of pretty-printers (see Objfiles In Guile).

Pretty-printer lookup is done by passing the value to be printed to the lookup function of each enabled object in turn. Lookup stops when a lookup function returns a non-#f value or when the list is exhausted.

gdb first checks the result of objfile-pretty-printers of each <gdb:objfile> in the current program space and iteratively calls each enabled lookup function in the list for that <gdb:objfile> until a non-#f object is returned. Lookup functions must return either a <gdb:pretty-printer-worker> object or #f. Otherwise an exception is thrown. If no pretty-printer is found in the objfile lists, gdb then searches the global pretty-printer list, calling each enabled function until a non-#f object is returned.

The order in which the objfiles are searched is not specified. For a given list, functions are always invoked from the head of the list, and iterated over sequentially until the end of the list, or a <gdb:pretty-printer-worker> object is returned.

For various reasons a pretty-printer may not work. For example, the underlying data structure may have changed and the pretty-printer is out of date.

The consequences of a broken pretty-printer are severe enough that gdb provides support for enabling and disabling individual printers. For example, if print frame-arguments is on, a backtrace can become highly illegible if any argument is printed with a broken printer.

Pretty-printers are enabled and disabled from Scheme by calling set-pretty-printer-enabled!. See Guile Pretty Printing API.