Re: Python API: Type introspection of function arguments
Simon Marchi <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <CAFXXi0m_w1CftMZ5B6Q7Wta1mKDLPA_BAAxQZ7sxAZ8Vtkzoxw@mail.gmail.com> |
On 25 September 2015 at 00:24, Martin Ünsal <[email protected]> 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