python: Provide textual representation for Inferior and Objfile
authorSimon Marchi <simon.marchi@ericsson.com>
Thu, 13 Sep 2018 15:53:22 +0000 (11:53 -0400)
committerSimon Marchi <simon.marchi@ericsson.com>
Thu, 13 Sep 2018 15:54:38 +0000 (11:54 -0400)
commit1256af7d1afb123c15ae3935de4470becdf7c512
tree8dcd53a790cf09f061522ecb2ee4298214c8580d
parent508d0c9b5945d30bcf163b9b88213d277949e9a8
python: Provide textual representation for Inferior and Objfile

Printing a GDB Python object is notoriously not helpful:

>>> print(gdb.selected_inferior())
<gdb.Inferior object at 0x7fea59aed198>
>>> print(gdb.objfiles())
[<gdb.Objfile object at 0x7fea59b57c90>]

This makes printing debug traces more difficult than it should be.  This
patch provides some repr() implementation for these two types (more to
come if people agree with the idea, but I want to test the water first).
Here's the same example as above, but with this patch:

>>> print(gdb.selected_inferior())
<gdb.Inferior num=1>
>>> print(gdb.objfiles())
[<gdb.Objfile filename=/home/emaisin/build/binutils-gdb-gcc-git/gdb/test>]

I implemented repr rather than str, because when printing a list (or
another container I suppose), Python calls the repr method of the
elements.  This is useful when printing a list of inferiors or objfiles.
The print(gdb.objfiles()) above would not have worked if I had
implemented str.

I found this post useful to understand the difference between repr and
str:

  https://stackoverflow.com/questions/1436703/difference-between-str-and-repr

gdb/ChangeLog:

* python/py-inferior.c (infpy_repr): New.
(inferior_object_type): Register infpy_repr.
* python/py-objfile.c (objfpy_repr): New.
(objfile_object_type): Register objfpy_repr.

gdb/testsuite/ChangeLog:

* gdb.python/py-inferior.exp: Test repr() of gdb.Inferior.
* gdb.python/py-objfile.exp: Test repr() of gdb.Objfile.
* gdb.python/py-symtab.exp: Update test printing an objfile.

gdb/doc/ChangeLog:

* python.texi (Basic Python): Mention the string representation
of GDB Python objects.
gdb/ChangeLog
gdb/doc/ChangeLog
gdb/doc/python.texi
gdb/python/py-inferior.c
gdb/python/py-objfile.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/py-inferior.exp
gdb/testsuite/gdb.python/py-objfile.exp
gdb/testsuite/gdb.python/py-symtab.exp