Mirror of the gdb mailing list
 help / color / mirror / Atom feed
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


  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