gdb: Xmethod API
23.2.2.14 Xmethod API
.....................
The GDB Python API provides classes, interfaces and functions to
implement, register and manipulate xmethods. Xmethods In
Python.
An xmethod matcher should be an instance of a class derived from
'XMethodMatcher' defined in the module 'gdb.xmethod', or an object with
similar interface and attributes. An instance of 'XMethodMatcher' has
the following attributes:
-- Variable: name
The name of the matcher.
-- Variable: enabled
A boolean value indicating whether the matcher is enabled or
disabled.
-- Variable: methods
A list of named methods managed by the matcher. Each object in the
list is an instance of the class 'XMethod' defined in the module
'gdb.xmethod', or any object with the following attributes:
'name'
Name of the xmethod which should be unique for each xmethod
managed by the matcher.
'enabled'
A boolean value indicating whether the xmethod is enabled or
disabled.
The class 'XMethod' is a convenience class with same attributes as
above along with the following constructor:
-- Function: XMethod.__init__ (self, name)
Constructs an enabled xmethod with name NAME.
The 'XMethodMatcher' class has the following methods:
-- Function: XMethodMatcher.__init__ (self, name)
Constructs an enabled xmethod matcher with name NAME. The
'methods' attribute is initialized to 'None'.
-- Function: XMethodMatcher.match (self, class_type, method_name)
Derived classes should override this method. It should return a
xmethod worker object (or a sequence of xmethod worker objects)
matching the CLASS_TYPE and METHOD_NAME. CLASS_TYPE is a
'gdb.Type' object, and METHOD_NAME is a string value. If the
matcher manages named methods as listed in its 'methods' attribute,
then only those worker objects whose corresponding entries in the
'methods' list are enabled should be returned.
An xmethod worker should be an instance of a class derived from
'XMethodWorker' defined in the module 'gdb.xmethod', or support the
following interface:
-- Function: XMethodWorker.get_arg_types (self)
This method returns a sequence of 'gdb.Type' objects corresponding
to the arguments that the xmethod takes. It can return an empty
sequence or 'None' if the xmethod does not take any arguments. If
the xmethod takes a single argument, then a single 'gdb.Type'
object corresponding to it can be returned.
-- Function: XMethodWorker.get_result_type (self, *args)
This method returns a 'gdb.Type' object representing the type of
the result of invoking this xmethod. The ARGS argument is the same
tuple of arguments that would be passed to the '__call__' method of
this worker.
-- Function: XMethodWorker.__call__ (self, *args)
This is the method which does the _work_ of the xmethod. The ARGS
arguments is the tuple of arguments to the xmethod. Each element
in this tuple is a gdb.Value object. The first element is always
the 'this' pointer value.
For GDB to lookup xmethods, the xmethod matchers should be registered
using the following function defined in the module 'gdb.xmethod':
-- Function: register_xmethod_matcher (locus, matcher, replace=False)
The 'matcher' is registered with 'locus', replacing an existing
matcher with the same name as 'matcher' if 'replace' is 'True'.
'locus' can be a 'gdb.Objfile' object (Objfiles In Python),
or a 'gdb.Progspace' object (Progspaces In Python), or
'None'. If it is 'None', then 'matcher' is registered globally.