Python API: Type introspection of function arguments
Simon Marchi
simon.marchi@polymtl.ca
Sun Sep 27 23:28:00 GMT 2015
On 25 September 2015 at 00:24, Martin Ünsal <munsal@nestlabs.com> wrote:
> Hi all,
>
> GDB Python bindings are great. I have a question though.
>
> I'm trying to use a Python script to introspect the type of a function
> argument. The GDB documentation claims this is possible:
> https://sourceware.org/gdb/current/onlinedocs/gdb/Types-In-Python.html#Types-In-Python
>
> "— Function: Type.fields ()
> For structure and union types, this method returns the fields. Range
> types have two fields, the minimum and maximum values. Enum types have
> one field per enum constant. Function and method types have one field
> per parameter."
>
> However when I try this (in 7.8.1.20141128-cvs) I get the following error:
>
>>>> sym = gdb.lookup_global_symbol('my_function')
>>>> print sym.type.code == gdb.TYPE_CODE_FUNC
> True
>>>> print sym.type.fields()
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> TypeError: Type is not a structure, union, or enum type.
>>>>
>
> I also looked in the code (gdb/python/py-type.c) and this seems to
> have the same behavior in 7.10.
>
> In light of this issue, can anyone suggest how to get function
> argument type information from Python API?
>
> Thanks,
> Martin
Hi Martin,
I found a bug for that in the bugzilla:
https://sourceware.org/bugzilla/show_bug.cgi?id=18073
I tested the feature with a few releases of gdb. It appeared it 7.1
and stopped working in 7.4, so it's been broken for quite a while.
The patch attached to the bug seems to make it work again. I am
running the regression testsuite at the moment. If it's successful,
I'll try to add a test for that and submit it... unless you want to do
it, of course :).
In the mean time, I don't have any suggestions to circumvent that,
other than building your own gdb (with the patch applied) for now.
Simon
More information about the Gdb
mailing list