From: Simon Sobisch <simonsobisch@gnu.org>
To: gdb@sourceware.org
Subject: Re: Is it possible to "inject" into the stack or show non-stack entries via frame decorator api?
Date: Sun, 28 Nov 2021 16:40:33 +0100 [thread overview]
Message-ID: <0a462ccc-d5ca-1b82-8dd2-646491b81944@gnu.org> (raw)
In-Reply-To: <f1e33049-aa36-07d3-709d-642f74d49ffd@gnu.org>
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
>
>
prev parent reply other threads:[~2021-11-28 15:40 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-24 22:24 Simon Sobisch
2021-07-17 14:22 ` Simon Sobisch
2021-07-19 15:49 ` How/where is the mi watchpoint-trigger / EXEC_ASYNC_WATCHPOINT_TRIGGER raised? Simon Sobisch
2021-11-28 15:40 ` Simon Sobisch [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0a462ccc-d5ca-1b82-8dd2-646491b81944@gnu.org \
--to=simonsobisch@gnu.org \
--cc=gdb@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).