This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Python API iterate through the arguments of a frame


On Feb 21, 2012, at 7:14 PM, Tom Tromey wrote:

>>>>>> "Cristian" == Cristian Zamfir <cristian.zamfir@epfl.ch> writes:
> 
> Cristian> I would like to write a Python script that iterates through the
> Cristian> arguments of a frame. I was hoping I can retrieve these arguments from
> Cristian> a Frame object, but I did not find a way to do this, unless I know the
> Cristian> name of the variables. Similarly, I would like to iterate through all
> Cristian> the locals of the frame.
> 
> Cristian> Is this possible with the current Python API? If not, can you please
> Cristian> point me to where I could add additional functions to the Python API?
> 
> You can find the locals and arguments via Frame.block.

Great, this worked.

> 
> I see that gdb.Block is under-documented in this area.  Sorry about
> that, I will write a patch.

Thank you, that would be very useful.  Is there a quick way to see the names of all available API functions, just in case there are more undocumented ones, other than looking into the  gdb/python/ directory and infer from the Python bindings (e.g., py-block.c)?

Somehow unrelated to this, I just noticed that I can retrieve the type of a symbol while running a program inside gdb, but not when loading a dumped core. In the latter case I get this error: 
AttributeError: 'gdb.Symbol' object has no attribute 'type'. 

I can however still retrieve the name and the value of the symbol when loading a core. Is it possible to also get the type?

I should mention that I also see these two warnings when loading the core:
warning: core file may not match specified executable file.
warning: Can't read pathname for load map: Input/output error.

Thanks, 
Cristi

> 
> Here's a quick example:
> 
> (top-gdb) start
> [...]
> Temporary breakpoint 3, main (argc=
> During symbol reading, incomplete CFI data; unspecified registers (e.g., rax) at 0x488914.
> 1, argv=0x7fffffffe558) at ../../archer/gdb/gdb.c:26
> (top-gdb) python
>> for sym in gdb.newest_frame().block():
>> print sym
>> end
> argc
> argv
> args
> 
> 
> In order to find all the locals in scope, and the arguments, you may
> have to iterate upwards over blocks via Block.superblock.  The block
> with a non-None 'function' attribute will hold the arguments.
> 
> Tom


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]