This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Python API: Type introspection of function arguments
- From: Simon Marchi <simon dot marchi at polymtl dot ca>
- To: Martin Ãnsal <munsal at nestlabs dot com>
- Cc: "gdb at sourceware dot org" <gdb at sourceware dot org>
- Date: Sun, 27 Sep 2015 19:28:15 -0400
- Subject: Re: Python API: Type introspection of function arguments
- Authentication-results: sourceware.org; auth=none
- References: <CAHHafQWq=XGR8JBJR8fSTJwWX2YUdcX0oS2kak_vbxT3xzA-dQ at mail dot gmail dot com>
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