This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: repo to work on python scripting support
Hi everybody,
My turn at the status update. :-)
I did the OO rewrite for the frames support, it has a few useful methods
already (equals, is_inner_than, get_name, get_pc, get_prev, get_next,
find_sal). You can also call gdb.frames(), which will return a tuple
containing all frames in the stack (or throw an exception if there's a
problem with the unwinding).
I also exposed a little bit of struct symtab and struct symtab_and_line
(which is returned by Frame.find_sal), just enough to be able to
implement a mostly complete backtrace command in Python (it's only
missing ability to print function arguments, which I plan to work on
later).
Regarding the values work that Tromey mentioned, I didn't add
functionality to the code that Volodya implemented, just converted it to
OO form and worked on lifetime of struct value vs lifetime of Python
Value object (I believe I is correct now).
Here's the Python implementation of an "rbt" command which prints the
backtrace in reverse (or right :-P) order:
python
import sys
def gdb_rbacktrace ():
frames = gdb.frames ()
for i in reversed (range (len (frames))):
sal = frames[i].find_sal ()
pc = frames[i].get_pc ()
sys.stdout.write ("#%-2d" % i)
if pc != sal.get_pc () or not sal.symtab:
sys.stdout.write (" 0x%08x in" % pc)
sys.stdout.write (" " + frames[i].get_name ())
if sal.symtab and sal.symtab.get_filename ():
sys.stdout.write (" at " + sal.symtab.get_filename ())
sys.stdout.write (":" + str (sal.get_line ()))
if not frames[i].get_name () or (not sal.symtab or not
sal.symtab.get_filename ()):
lib = gdb.solib_address (pc)
if lib:
sys.stdout.write (" from " + lib)
sys.stdout.write ("\n")
end
define rbt
dont-repeat
python gdb_rbacktrace ()
end
Here's sample output:
(gdb) rbt
#2 0x080483bb in main at ../../src/examples/funcs.c:15
#1 0x08048391 in f1 at ../../src/examples/funcs.c:10
#0 f2 at ../../src/examples/funcs.c:5
(gdb)
--
[]'s
Thiago Jung Bauermann
Software Engineer
IBM Linux Technology Center