From: Daniel Jacobowitz <drow@false.org>
To: Vladimir Prus <ghost@cs.msu.su>
Cc: Nick Roberts <nickrob@snap.net.nz>,
Denis PILAT <denis.pilat@st.com>,
gdb-patches@sources.redhat.com
Subject: Re: [RFC] Prints the frame id when target stops
Date: Wed, 17 Jan 2007 06:18:00 -0000 [thread overview]
Message-ID: <20070117061815.GD19331@nevyn.them.org> (raw)
In-Reply-To: <200701170234.34303.ghost@cs.msu.su>
On Wed, Jan 17, 2007 at 02:34:34AM +0300, Vladimir Prus wrote:
> On Wednesday 17 January 2007 00:12, Nick Roberts wrote:
> > > > We'd like to avoid refreshing the thread and the frame view when the user
> > > > perform a step (or a next) and when the program stops in the same thread
> > > > and in the same frame. In the stop reason we got the current thread id,
> > > > but we are missing something to identify the frame. That patch lets gdb
> > > > emits on the MI output a string that could be used to easily identify the
> > > > current frame. If you are ok with this approach then I'll update the
> > > > testsuite.
> > >
> > > Would not a better approach be to modify -stack-list-frames and friends,
> > > so that they check frame id internally, and it has not changed, just
> > > return the same result? Such approach will uniformly help all frontends,
> > > and won't expose new concepts in the interface.
> >
> > It would change the behviour of those commands but I guess it could be added
> > as an option.
>
> It actually won't. If -stack-list-frames is changed to return cached result
> when it's absolutely clear that the stack did not change, you have no behaviour
> change, just better performance.
But Nick is right - it is very hard to determine whether two frames
with the same frame ID are the same frame across an operation. It'd be
nice if that weren't the case. The hard case for this is unfortunately
very hard - but if the front end knows that it did a single step, then
it's very unlikely to be wrong if the ID is unchanged. I really don't
know what the right thing to do here is. Guessing based on what the
last execution was (step, next, vs continue or C-c) might be the best
we can do :-(
Here's how it can happen:
int foo()
{
return 1;
}
int bar()
{
char buf[SIZE1];
return foo();
}
int bar2()
{
char buf[SIZE2];
return foo();
}
int bar3()
{
char buf[SIZE3];
return bar2();
}
int main()
{
bar();
bar3();
}
The backtrace is different in an interesting way here if you set a
breakpoint on foo and continue twice, but if you choose your buffer
sizes just right, then you can get the two calls to foo to have the
same ID. If your IDE doesn't refresh its stack display, you're
going to have a stale call trace.
Apple implemented a very high performance, light weight unwinder that
just does frame IDs - on PPC this happens to be quite easy. We could
make other targets do the same thing. That probably helps here.
--
Daniel Jacobowitz
CodeSourcery
next prev parent reply other threads:[~2007-01-17 6:18 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-15 16:21 Denis PILAT
2007-01-15 21:37 ` Nick Roberts
2007-01-15 23:11 ` Nick Roberts
2007-01-15 23:49 ` Nick Roberts
2007-01-17 8:26 ` Denis PILAT
2007-01-16 16:20 ` Vladimir Prus
2007-01-16 21:12 ` Nick Roberts
2007-01-16 23:38 ` Vladimir Prus
2007-01-17 6:18 ` Daniel Jacobowitz [this message]
2007-01-17 21:46 ` Vladimir Prus
2007-01-20 17:02 ` Daniel Jacobowitz
2007-01-17 21:29 ` Mark Kettenis
2007-01-17 21:38 ` Vladimir Prus
2007-01-17 21:59 ` Frédéric Riss
2007-01-17 22:14 ` Vladimir Prus
2007-01-18 8:00 ` Frederic RISS
2007-01-17 22:17 ` Daniel Jacobowitz
2007-01-18 7:58 ` Frederic RISS
2007-01-18 18:34 ` Jim Blandy
2007-01-19 14:28 ` Denis PILAT
2007-01-20 17:00 ` Daniel Jacobowitz
2007-01-18 19:59 ` Daniel Jacobowitz
2007-01-17 6:19 ` Daniel Jacobowitz
2007-01-18 21:13 ` Nick Roberts
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=20070117061815.GD19331@nevyn.them.org \
--to=drow@false.org \
--cc=denis.pilat@st.com \
--cc=gdb-patches@sources.redhat.com \
--cc=ghost@cs.msu.su \
--cc=nickrob@snap.net.nz \
/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