gdb multiple stacks

Thierry Delisle tdelisle@uwaterloo.ca
Thu Mar 12 21:11:16 GMT 2020


Hi,
I am trying to extend gdb using the Python API for a C++ program that 
uses Boost.Context from the boost C++ libraries.

This program has multiple stacks for a single thread and I want to walk 
these different stacks. I can easily list the stacks using the Python 
API in gdb and can display the address of the start of the stack, the 
limit of the stack, the current stack-pointer, frame-pointer and program 
counter of all the stacks.

Is there some gdb command or gdb API that I can use to change the 
current stack, similarly to the thread command?


The programming language Go uses a similar system: goroutines. Looking 
at its extension file(https://golang.org/src/runtime/runtime-gdb.py), I
can see it uses the following trick to print backtraces :

# In GDB, assignments to sp must be done from the
# top-most frame, so select frame 0 first.
gdb.execute('select-frame 0')
gdb.parse_and_eval('$sp = {0}'.format(str(sp)))
gdb.parse_and_eval('$pc = {0}'.format(str(pc)))

This trick does not work for core dumps, gdb requires a live process to 
assign to registers.

Is there some other way to change the current stack, instead of directly 
writing to the registers?

Thank you for your time,

Thierry



More information about the Gdb mailing list