From: Vladimir Prus <ghost@cs.msu.su>
To: Nick Roberts <nickrob@snap.net.nz>
Cc: Jim Ingham <jingham@apple.com>,
Daniel Jacobowitz <drow@false.org>,
gdb@sources.redhat.com
Subject: Re: -var-update and address changes
Date: Tue, 02 May 2006 13:41:00 -0000 [thread overview]
Message-ID: <200605021740.40193.ghost@cs.msu.su> (raw)
In-Reply-To: <17495.23335.868893.219879@farnswood.snap.net.nz>
On Tuesday 02 May 2006 17:14, Nick Roberts wrote:
> Vladimir Prus writes:
> > On Friday 14 April 2006 23:49, Jim Ingham wrote:
> > > Note as an aside, that we had to add another varobj type which is
> > > evaluated in the selected frame, whatever that happens to be. That
> > > was useful for a general "variable inspector" window. People wanted
> > > to put some expression there, and have it re-evaluated in the topmost
> > > frame whenever they stopped. So we added that functionality. But
> > > that is clearly distinct from what the "*" varobj type is supposed to
> > > mean.
> >
> > Hi Jim,
> > is this "variable inspector" the same thing that's called "watches" in
> > other IDEs? Well, I really wish that gdb did support variable objects
> > that are reevaluated in the current frame. As it stands now, I have to
> > re-create variable objects on each step.
>
> Assuming some ambiguity with current/selected, have you tried (not
> documented):
>
> "-var-create - @ NAME"
>
> which behaves a bit differently to "-var-create - * NAME".
Wow, that's exactly what I'm looking for. Except that it's buggy :-(
When I have code like this:
int foo()
{
long i = 15;
printf("foo\n");
}
int main()
{
int i = 5;
printf("hi 1\n");
foo();
}
and I use
-var-create I @ i
right before call to 'foo()', then when I enter 'foo', -var-update correctly
notices the change in value and in type. However, when I have:
int foo()
{
long i = 15;
printf("foo\n");
}
int main()
{
int i = 5;
printf("hi 1\n");
foo();
}
then -var-update inside 'foo' does not report anything and
-var-evaluate-expression still reports the value of 'i' from 'main'. Here's
the faulty code (varobj.c: value_of_root):
tmp_var = varobj_create (NULL, var->name, (CORE_ADDR) 0,
USE_SELECTED_FRAME);
if (tmp_var == NULL)
{
return NULL;
}
new_type = varobj_get_type (tmp_var);
if (strcmp (old_type, new_type) == 0)
{
varobj_delete (tmp_var, NULL, 0);
*type_changed = 0;
}
else
In other words, if the type of 'i' in the current frame happens to be the
same, the newly created varobj is immediately deleted. What about patch along
the following lines, that will create new varobj even if type is the same?
@@ -1641,28 +1741,14 @@
return NULL;
}
new_type = varobj_get_type (tmp_var);
- if (strcmp (old_type, new_type) == 0)
- {
- varobj_delete (tmp_var, NULL, 0);
- *type_changed = 0;
- }
- else
- {
- if (*type_changed)
- {
- tmp_var->obj_name =
- savestring (var->obj_name, strlen (var->obj_name));
- varobj_delete (var, NULL, 0);
- }
- else
- {
- tmp_var->obj_name = varobj_gen_name ();
- }
- install_variable (tmp_var);
- *var_handle = tmp_var;
- var = *var_handle;
- *type_changed = 1;
- }
+ *type_changed = (strcmp (old_type, new_type) != 0);
+
+ tmp_var->obj_name =
+ savestring (var->obj_name, strlen (var->obj_name));
+ varobj_delete (var, NULL, 0);
+ install_variable (tmp_var);
+ *var_handle = tmp_var;
+ var = *var_handle;
}
- Volodya
next prev parent reply other threads:[~2006-05-02 13:41 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-12 16:02 Vladimir Prus
2006-04-12 18:25 ` Jim Ingham
2006-04-13 9:25 ` Vladimir Prus
2006-04-13 17:31 ` Jim Ingham
2006-04-14 13:25 ` Daniel Jacobowitz
2006-04-14 20:03 ` Jim Ingham
2006-04-14 20:09 ` Daniel Jacobowitz
2006-04-14 20:27 ` Jim Ingham
2006-04-14 21:37 ` Daniel Jacobowitz
2006-04-17 6:18 ` Vladimir Prus
2006-04-17 9:02 ` Mark Kettenis
2006-04-17 10:54 ` Vladimir Prus
2006-05-02 12:50 ` Vladimir Prus
2006-05-02 13:14 ` Nick Roberts
2006-05-02 13:41 ` Vladimir Prus [this message]
2006-05-02 17:23 ` Jim Ingham
2006-05-03 6:03 ` Vladimir Prus
[not found] ` <20060504145046.GA32605@nevyn.them.org>
2006-05-04 15:12 ` Vladimir Prus
2006-05-04 15:13 ` Daniel Jacobowitz
2006-05-05 6:25 ` Vladimir Prus
2006-05-05 15:02 ` Daniel Jacobowitz
2006-04-16 15:52 ` 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=200605021740.40193.ghost@cs.msu.su \
--to=ghost@cs.msu.su \
--cc=drow@false.org \
--cc=gdb@sources.redhat.com \
--cc=jingham@apple.com \
--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