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

Simon Sobisch via Gdb <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
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
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.