From: Daniel Jacobowitz <drow@false.org>
To: gdb@sourceware.org
Subject: Re: Checking if addess is on stack?
Date: Thu, 20 Apr 2006 15:32:00 -0000 [thread overview]
Message-ID: <20060420143944.GA14255@nevyn.them.org> (raw)
In-Reply-To: <u4q0owcd4.fsf@gnu.org>
On Thu, Apr 20, 2006 at 05:27:51PM +0300, Eli Zaretskii wrote:
> > Date: Thu, 20 Apr 2006 08:49:04 -0400
> > From: Daniel Jacobowitz <drow@false.org>
> >
> > What he wants is not to stop the watchpoint when ptr goes out of scope,
> > but when ptr->i goes out of scope - if ptr points to a stack allocated
> > variable, in this function or another one.
>
> Sorry, I'm probably too dumb and so am still in the woods--could you
> provide an example of such a situation?
>
> Specifically, where is ptr allocated--is it itself on the stack or
> somewhere else?
Everything's clearer with code! Let's try this.
struct kind {
int i;
};
void func1 (void)
{
struct kind kin;
func2 (&kin);
}
void func2 (struct kind *my_kin)
{
struct kind *ptr = my_kin;
/* HERE */
}
We're at HERE. I believe that what Vladimir wants is:
(A) a watchpoint on the value referenced by ptr->i, at the moment,
regardless of future changes to ptr. I do this all the time
and wouldn't mind an easier way, but it's just:
print &ptr->i
watch *$31
(Where $31 is the right number. DON'T try "watch *$"! It will
re-evaluate the expression when you next stop and get a different
value for $ !)
(B) For that watchpoint to go out of scope when kin.i, the underlying
object, dies.
Put this way, it's apparent that there is really no way to do
this. We could approximate it; we could figure out that it
belonged to a frame, but not its scope within that frame.
Well, I suppose we could... we could calculate the addresses
of all locals of that frame within the current block and
work out inside which one it was.
-> Would that actually be neat and useful for the CLI?
(gdb) print $31
$32 = (int *) 0x44444444 <kin.i in frame #3>
--
Daniel Jacobowitz
CodeSourcery
next prev parent reply other threads:[~2006-04-20 14:39 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-20 10:27 Vladimir Prus
2006-04-20 11:42 ` Eli Zaretskii
2006-04-20 11:48 ` Vladimir Prus
2006-04-20 12:21 ` Eli Zaretskii
2006-04-20 12:49 ` Vladimir Prus
2006-04-20 14:27 ` Eli Zaretskii
2006-04-20 14:39 ` Daniel Jacobowitz
2006-04-20 15:24 ` Eli Zaretskii
2006-04-20 15:32 ` Daniel Jacobowitz [this message]
2006-04-20 18:41 ` Eli Zaretskii
2006-04-20 19:12 ` Daniel Jacobowitz
2006-04-21 11:45 ` Eli Zaretskii
2006-04-22 8:06 ` Daniel Jacobowitz
2006-04-20 16:29 ` Vladimir Prus
2006-04-20 19:03 ` Eli Zaretskii
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=20060420143944.GA14255@nevyn.them.org \
--to=drow@false.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