diff options
author | Doug Evans <dje@google.com> | 2014-10-30 17:05:17 -0700 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2014-10-30 17:05:17 -0700 |
commit | 02be9a71009c94840f2367aa5554cbe5b71f56d1 (patch) | |
tree | 5ea6265fa492caee6ec30f97bcf84e2cfaa05414 /gdb/doc | |
parent | c21c8bde378b41f80ef61313ffbf653592e4ba28 (diff) | |
download | binutils-gdb-02be9a71009c94840f2367aa5554cbe5b71f56d1.tar.gz |
Add ability to add attributes to gdb.Objfile and gdb.Progspace objects.
gdb/ChangeLog:
* NEWS: Mention ability add attributes to gdb.Objfile and
gdb.Progspace objects.
* python/py-objfile.c (objfile_object): New member dict.
(objfpy_dealloc): Py_XDECREF dict.
(objfpy_initialize): Initialize dict.
(objfile_getset): Add __dict__.
(objfile_object_type): Set tp_dictoffset member.
* python/py-progspace.c (progspace_object): New member dict.
(pspy_dealloc): Py_XDECREF dict.
(pspy_initialize): Initialize dict.
(pspace_getset): Add __dict__.
(pspace_object_type): Set tp_dictoffset member.
gdb/doc/ChangeLog:
* python.texi (Progspaces In Python): Document ability to add
random attributes to gdb.Progspace objects.
(Objfiles In Python): Document ability to add random attributes to
gdb.objfile objects.
gdb/testsuite/ChangeLog:
* gdb.python/py-objfile.exp: Add tests for setting random attributes
in objfiles.
* gdb.python/py-progspace.exp: Add tests for setting random attributes
in progspaces.
Diffstat (limited to 'gdb/doc')
-rw-r--r-- | gdb/doc/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/doc/python.texi | 66 |
2 files changed, 73 insertions, 0 deletions
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index f60fd8fc0b2..2e619da5dad 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,10 @@ +2014-10-30 Doug Evans <dje@google.com> + + * python.texi (Progspaces In Python): Document ability to add + random attributes to gdb.Progspace objects. + (Objfiles In Python): Document ability to add random attributes to + gdb.objfile objects. + 2014-10-27 Pedro Alves <palves@redhat.com> * gdb.texinfo (Continuing and Stepping): Add cross reference to diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index f1fd841bf9c..5b35306135e 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -3366,6 +3366,50 @@ The @code{frame_filters} attribute is a dictionary of frame filter objects. @xref{Frame Filter API}, for more information. @end defvar +One may add arbitrary attributes to @code{gdb.Progspace} objects +in the usual Python way. +This is useful if, for example, one needs to do some extra record keeping +associated with the program space. + +In this contrived example, we want to perform some processing when +an objfile with a certain symbol is loaded, but we only want to do +this once because it is expensive. To achieve this we record the results +with the program space because we can't predict when the desired objfile +will be loaded. + +@smallexample +(gdb) python +def clear_objfiles_handler(event): + event.progspace.expensive_computation = None +def expensive(symbol): + """A mock routine to perform an "expensive" computation on symbol.""" + print "Computing the answer to the ultimate question ..." + return 42 +def new_objfile_handler(event): + objfile = event.new_objfile + progspace = objfile.progspace + if not hasattr(progspace, 'expensive_computation') or \ + progspace.expensive_computation is None: + # We use 'main' for the symbol to keep the example simple. + # Note: There's no current way to constrain the lookup + # to one objfile. + symbol = gdb.lookup_global_symbol('main') + if symbol is not None: + progspace.expensive_computation = expensive(symbol) +gdb.events.clear_objfiles.connect(clear_objfiles_handler) +gdb.events.new_objfile.connect(new_objfile_handler) +end +(gdb) file /tmp/hello +Reading symbols from /tmp/hello...done. +Computing the answer to the ultimate question ... +(gdb) python print gdb.current_progspace().expensive_computation +42 +(gdb) run +Starting program: /tmp/hello +Hello. +[Inferior 1 (process 4242) exited normally] +@end smallexample + @node Objfiles In Python @subsubsection Objfiles In Python @@ -3426,6 +3470,28 @@ The @code{frame_filters} attribute is a dictionary of frame filter objects. @xref{Frame Filter API}, for more information. @end defvar +One may add arbitrary attributes to @code{gdb.Objfile} objects +in the usual Python way. +This is useful if, for example, one needs to do some extra record keeping +associated with the objfile. + +In this contrived example we record the time when @value{GDBN} +loaded the objfile. + +@smallexample +(gdb) python +import datetime +def new_objfile_handler(event): + # Set the time_loaded attribute of the new objfile. + event.new_objfile.time_loaded = datetime.datetime.today() +gdb.events.new_objfile.connect(new_objfile_handler) +end +(gdb) file ./hello +Reading symbols from ./hello...done. +(gdb) python print gdb.objfiles()[0].time_loaded +2014-10-09 11:41:36.770345 +@end smallexample + A @code{gdb.Objfile} object has the following methods: @defun Objfile.is_valid () |