From: Vladimir Prus <ghost@cs.msu.su>
To: gdb-patches@sources.redhat.com
Subject: Re: -var-update @
Date: Thu, 27 Mar 2008 07:00:00 -0000 [thread overview]
Message-ID: <fsfgla$h72$1@ger.gmane.org> (raw)
In-Reply-To: <18411.11710.597524.273860@kahikatea.snap.net.nz>
Nick Roberts wrote:
> Vladimir Prus writes:
> >
> > I've checked it the attached patch which allows one to issue
> >
> > -var-update @
> >
> > and have all @-varobjs (or floating varobjs, as Nick suggested to name them),
> > updated. I believe this is the only reasonable way to make @ varobjs, which
> > are not bound to thread/frame/block to adequately work in MT program.
>
> This doesn't seem right to me but then there hasn't been any discussion.
>
> According to the manual in "-var-create - * EXPRESSION", "*" means "current
> frame" (it's actually the selected frame because if you go up a frame, you can
> create a variable object there, but as I say the manual mixes the terms).
>
> Whereas in "-var-update *", "*" means "all variable objects", as in a wildcard
> character.
>
> So I think it's wrong to equate the two uses of "*" which looks like what
> you've done with "@".
So, you think the change might create confusion for *users* for MI interface.
Clearly, as far as behaviour goes, no equation of two uses of "*" was done.
I think it might be unfortunate that '*' means different things in different
context, but that's what we have now, and probably the first fix to to
remove '-var-create *' from the manual and educate frontend authors to use
the frame explicitly, as that will make the protocol even less stateful.
> > Otherwise,
> > if frontend switches thread or frame and wishes to update floating varobjs,
> > it should either to "-var-update *", which is extra work, or update varobjs
> > one-by-one, which is also not very nice.
>
> I think that's exactly how it's mean't to work, although it's currently broken.
> The usual use case that's cited is recursive functions.
>
> Using "-var-create - @ EXPRESSION" if there are two frames and you have "int
> myvar" in one and "float myvar" in the other, when you change frame, you get
> something like:
>
> -var-update --all-values *
> ^done,changelist=[{name="var1",in_scope="true",new_type="float",new_num_children="0"},
>
> which is missing the value field.
>
> with ints in both frames, moving up from the frame the variable object was
> created in I get something like:
>
> -var-update --all-values *
> ^done,changelist=[{name="var2",value="7",in_scope="true",type_changed="false"}]
> (gdb)
> up
> &"up\n"
> ~"#1 0x08048a00 in main (argc=-72539512, argv=0xbfca8f74) at myprog.c:232\n"
> ~"232\t asdf = myprint (2*i, *(a + i) /* hello */);\n"
> ^done
> (gdb)
> -var-update --all-values *
> ^done,changelist=[{name="var2",value="-1077244176",in_scope="true",type_changed="false"}]
>
> when the value is really 0 in the upper frame.
Sorry, I don't quite get, from your description, when the output of -var-update
misses the value, and when the value is wrong -- it sounds like both cases happen
when you do -var-update in a different frame. Can you clarify, or maybe create a testcase
for this?
> I think we should fix (and document) such floating variable objects
We should; I was not aware of the bug with wrong value you report above.
> but I really don't think we want a second command to update them.
Let me try again. You are using '-var-update *' above. This command will update all
variable objects, including those that a bound to a frame. There's no need to update
variable objects that are bound to a frame -- a change to selected thread or frame
will not change them at all. Updating variable object can take considerable time,
and therefore it's better to be able to update only floating variable object.
Is any bit of the logic above faulty?
- Volodya
next prev parent reply other threads:[~2008-03-27 7:00 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-26 14:54 Vladimir Prus
2008-03-27 5:17 ` Nick Roberts
2008-03-27 7:00 ` Vladimir Prus [this message]
2008-03-27 9:54 ` Nick Roberts
2008-03-27 10:38 ` Vladimir Prus
2008-03-27 13:25 ` Marc Khouzam
2008-03-27 13:37 ` Vladimir Prus
2008-03-27 20:58 ` Nick Roberts
2008-03-28 14:32 ` Marc Khouzam
2008-03-28 16:22 ` Vladimir Prus
2008-03-28 16:33 ` Marc Khouzam
2008-04-01 13:37 ` André Pönitz
2008-04-01 13:56 ` Marc Khouzam
2008-04-01 14:30 ` André Pönitz
2008-04-03 19:10 ` Daniel Jacobowitz
2008-04-03 19:31 ` Daniel Jacobowitz
2008-04-03 20:05 ` Michael Snyder
2008-03-29 5:16 ` Nick Roberts
2008-03-29 6:38 ` Vladimir Prus
2008-03-30 3:54 ` Nick Roberts
2008-04-03 18:55 ` Vladimir Prus
2008-04-03 21:30 ` Nick Roberts
2008-04-04 11:45 ` Vladimir Prus
2008-04-11 22:01 ` Vladimir Prus
2008-04-11 23:22 ` 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='fsfgla$h72$1@ger.gmane.org' \
--to=ghost@cs.msu.su \
--cc=gdb-patches@sources.redhat.com \
/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