Is it possible to "inject" into the stack or show non-stack entries via frame decorator api?

Simon Sobisch simonsobisch@gnu.org
Sun Nov 28 15:40:33 GMT 2021


To answer my answer: No, it is currently not possible to do this via the 
frame decorator, there is a gdb.FrameDecoratpr.SymValueWrapper (which 
allows to add synthetic variables for frame locals), but nothing like a 
SymFrameWrapper which would allow to insert a synthetic frame.

So the option I've used is to

1st create a frame filter with eliding frames, like below (#0, #2, #4 
sample), which is by default deactivated

2nd add a new gdb.command of type gdb.COMMAND_STACK that does

   ffilter = gdb.frame_filters["my-eliding-filter"]
   ffilter.enabled = True
   btlines = gdb.execute("backtrace", True, True).split("\n")
   for line in btlines:
     print (line)
     # then print additional content
   ffilter.enabled = False

This has the down-side that the coloring gets lost, but is otherwise 
"working".

Simon


Am 25.06.2021 um 00:24 schrieb Simon Sobisch:
> Scenario:
> 
> the current call-stack currently looks like
> 
> #0 func3
> #1 func3_wrapper
> #2 func2
> #3 func2_wrapper
> #4 func1
> #5 func1_wrapper
> #6 main
> 
> 
> Using frame filters it is no problem to change that to either
> 
> #0 func3
> #2 func2
> #4 func1
> 
> or
> 
> #0 func3
>     #1 func3_wrapper
> #2 func2
>     #3 func2_wrapper
> #4 func1
>     #5 func1_wrapper
> #6 main
> 
> 
> Question: Is it possibly to also add a "virtual" stack entry (one could 
> select/up/down to), or at least show it in the backtrace?
> 
> Something like the following:
> 
> #0 func3 at ...
>     #0.1  func3_part_a at ...
>     #0.2  func3_part_c at ...
>     #0.3  func3_part_b at ...
>     #0.4  func3_part_a at ...
>     #0.5  func3_start at ...
> #2 func2 at ...
> 
> 
> Background:
> Each of those "func" entries in the stack have an internal frame 
> handling using a linked list that contains label address pointers. It 
> would be very cool to list those directly (currently only done with 
> additional commands local-backtrace and list-local-frame which I'd like 
> to drop).
> 
> I _guess_ adding those to the shown stack may be possible, but likely 
> only with telling GDB about those (patching GDB), but maybe there's a 
> way to at least print those with their positions in "bt" using a frame 
> decorator?
> 
> Thanks for answers,
> Simon
> 
> 


More information about the Gdb mailing list