This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
-var-update @
- From: Vladimir Prus <vladimir at codesourcery dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Wed, 26 Mar 2008 17:54:10 +0300
- Subject: -var-update @
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. 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.
- Volodya
2008-03-26 Vladimir Prus <vladimir@codesourcery.com>
* varobj.h (varobj_floating_p): Declare.
* varobj.c (varobj_floating_p): New.
* mi/mi-cmd-var.c (mi_cmd_var_update): When passed
'@' as the name, update all floating varobjs.
Index: varobj.c
===================================================================
RCS file: /cvs/src/src/gdb/varobj.c,v
retrieving revision 1.107
diff -u -p -r1.107 varobj.c
--- varobj.c 26 Mar 2008 14:11:18 -0000 1.107
+++ varobj.c 26 Mar 2008 14:48:37 -0000
@@ -1868,6 +1868,15 @@ varobj_value_is_changeable_p (struct var
return r;
}
+/* Return 1 if that varobj is floating, that is is always evaluated in the
+ selected frame, and not bound to thread/frame. Such variable objects
+ are created using '@' as frame specifier to -var-create. */
+int
+varobj_floating_p (struct varobj *var)
+{
+ return var->root->floating;
+}
+
/* Given the value and the type of a variable object,
adjust the value and type to those necessary
for getting children of the variable object.
Index: varobj.h
===================================================================
RCS file: /cvs/src/src/gdb/varobj.h,v
retrieving revision 1.16
diff -u -p -r1.16 varobj.h
--- varobj.h 24 Mar 2008 17:33:30 -0000 1.16
+++ varobj.h 26 Mar 2008 14:48:37 -0000
@@ -124,4 +124,6 @@ extern void varobj_invalidate (void);
extern int varobj_editable_p (struct varobj *var);
+extern int varobj_floating_p (struct varobj *var);
+
#endif /* VAROBJ_H */
Index: mi/mi-cmd-var.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmd-var.c,v
retrieving revision 1.46
diff -u -p -r1.46 mi-cmd-var.c
--- mi/mi-cmd-var.c 24 Mar 2008 17:33:30 -0000 1.46
+++ mi/mi-cmd-var.c 26 Mar 2008 14:48:39 -0000
@@ -558,7 +558,7 @@ mi_cmd_var_update (char *command, char *
/* Check if the parameter is a "*" which means that we want
to update all variables */
- if ((*name == '*') && (*(name + 1) == '\0'))
+ if ((*name == '*' || *name == '@') && (*(name + 1) == '\0'))
{
nv = varobj_list (&rootlist);
cleanup = make_cleanup (xfree, rootlist);
@@ -574,7 +574,8 @@ mi_cmd_var_update (char *command, char *
cr = rootlist;
while (*cr != NULL)
{
- varobj_update_one (*cr, print_values, 0 /* implicit */);
+ if (*name == '*' || varobj_floating_p (*cr))
+ varobj_update_one (*cr, print_values, 0 /* implicit */);
cr++;
}
do_cleanups (cleanup);