Pythons scripting API question

Evan Driscoll driscoll@cs.wisc.edu
Wed May 30 22:42:00 GMT 2012


On 05/30/2012 04:23 PM, Keith Seitz wrote:
> Frames contain blocks, blocks contain variables. Blocks in python can be
> iterated

Great, it's that information that I was missing.

However, if I do this:

> $ ./gdb -nx -q gdb -ex "break main" -ex "run"
> (gdb) python import gdb
> (gdb) python for n in gdb.selected_frame().block(): print n,
> argc argv args
> (gdb) python print n.type
> struct captured_main_args
> (gdb) python print n.name
> args
> (gdb) python print n.is_argument
> False
> (gdb) python print n.value(gdb.selected_frame())
> {argc = 0, argv = 0x488f80 <_start>, use_windows = -8032, interpreter_p
> = 0x0}

then on the last step I get this instead:

(gdb) python print n.value(gdb.selected_frame())
Traceback (most recent call last):
   File "<string>", line 1, in <module>
AttributeError: 'gdb.Symbol' object has no attribute 'value'
Error while executing Python code.

Instead, I have to use

(gdb) python print gdb.selected_frame().read_var(n)
{argc = 6742752, argv = 0x0, use_windows = -7696, interpreter_p = 0x0}


Is this just a version difference?

Evan



More information about the Gdb mailing list