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
>
>