gdb: Selecting Pretty-Printers

 
 23.2.2.6 Selecting Pretty-Printers
 ..................................
 
 The Python list 'gdb.pretty_printers' contains an array of functions or
 callable objects that have been registered via addition as a
 pretty-printer.  Printers in this list are called 'global' printers,
 they're available when debugging all inferiors.  Each 'gdb.Progspace'
 contains a 'pretty_printers' attribute.  Each 'gdb.Objfile' also
 contains a 'pretty_printers' attribute.
 
    Each function on these lists is passed a single 'gdb.Value' argument
 and should return a pretty-printer object conforming to the interface
 definition above (SeePretty Printing API).  If a function cannot
 create a pretty-printer for the value, it should return 'None'.
 
    GDB first checks the 'pretty_printers' attribute of each
 'gdb.Objfile' in the current program space and iteratively calls each
 enabled lookup routine in the list for that 'gdb.Objfile' until it
 receives a pretty-printer object.  If no pretty-printer is found in the
 objfile lists, GDB then searches the pretty-printer list of the current
 program space, calling each enabled function until an object is
 returned.  After these lists have been exhausted, it tries the global
 'gdb.pretty_printers' list, again calling each enabled function until an
 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 printer
 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 by attaching an 'enabled'
 attribute to the registered function or callable object.  If this
 attribute is present and its value is 'False', the printer is disabled,
 otherwise the printer is enabled.