This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [PATCH: gdb/mi + doco] -var-update
- From: Nick Roberts <nickrob at snap dot net dot nz>
- To: Daniel Jacobowitz <drow at false dot org>
- Cc: Bob Rossi <bob at brasko dot net>, Andrew Cagney <cagney at gnu dot org>,gdb-patches at sources dot redhat dot com
- Date: Mon, 2 May 2005 19:23:50 +1200
- Subject: Re: [PATCH: gdb/mi + doco] -var-update
- References: <16919.53411.753668.336933@farnswood.snap.net.nz><01c51709$Blat.v2.4$4a3292a0@zahav.net.il><16921.18627.457594.938060@farnswood.snap.net.nz><01c517d0$Blat.v2.4$09a26040@zahav.net.il><16922.43915.346792.973282@farnswood.snap.net.nz><01c51898$Blat.v2.4$f6fd05c0@zahav.net.il><16929.8147.933720.246602@farnswood.snap.net.nz><16955.41017.161288.832646@farnswood.snap.net.nz><20050401024942.GA2179@white><17013.35649.62745.226730@farnswood.snap.net.nz><20050502040526.GA10023@nevyn.them.org>
> > > > + const char novalues[] = "\"--no-values\"";
> > > > + const char withvalues[] = "\"--with-values\"";
> > > > + const char simplevalues[] = "\"--simple-values\"";
> > > > + const char allvalues[] = "\"--all-values\"";
> > >
> > > These could be made static.
> >
> > Not really. I use them in my patch for mi-cmd-stack.c which I included in
> > my earlier submission (Sun, 27 Feb 2005 14:18:11 +1300) but left out on
> > (Mar 19) as it was unchanged.
>
> If you want these to be global variables, you need to give them better
> names. Also, the GDB coding style means that multiple words
> get_underscores_for_separation.
I've revised the last patch accordingly. (I sent it before I read this e-mail).
> Please include the documentation with the patch anyway; a complete
> patch lets reviewers see the whole picture more easily.
All attached. Please note that the subject title refers to the "other" patch.
Nick
2005-05-02 Nick Roberts <nickrob@snap.net.nz>
* mi/mi-cmds.h: Add extern declarations for string constants for
MI command options.
* mi/mi-cmd-var.c: Define string constants for MI command options.
(mi_cmd_var_list_children): : Use string constants instead of
literals for MI command options.
(mi_cmd_var_update): New option --with-values for -var-update.
(varobj_update_one): Add argument for new option.
* mi/mi-cmd-stack.c (mi_cmd_stack_list_locals): Use string
constants instead of literals for MI command options.
*** /home/nick/src/gdb/mi/mi-cmds.h.~1.15.~ 2005-01-25 22:30:39.000000000 +1300
--- /home/nick/src/gdb/mi/mi-cmds.h 2005-05-02 16:51:37.000000000 +1200
***************
*** 50,55 ****
--- 50,60 ----
PRINT_SIMPLE_VALUES
};
+ extern const char mi_no_values[];
+ extern const char mi_with_values[];
+ extern const char mi_simple_values[];
+ extern const char mi_all_values[];
+
typedef enum mi_cmd_result (mi_cmd_argv_ftype) (char *command, char **argv, int argc);
/* Older MI commands have this interface. Retained until all old
*** /home/nick/src/gdb/mi/mi-cmd-var.c.~1.21.~ 2005-02-13 00:36:20.000000000 +1300
--- /home/nick/src/gdb/mi/mi-cmd-var.c 2005-05-02 16:54:02.000000000 +1200
***************
*** 30,38 ****
#include <ctype.h>
#include "gdb_string.h"
extern int varobjdebug; /* defined in varobj.c */
! static int varobj_update_one (struct varobj *var);
/* VAROBJ operations */
--- 30,44 ----
#include <ctype.h>
#include "gdb_string.h"
+ const char mi_no_values[] = "--no-values";
+ const char mi_with_values[] = "--with-values";
+ const char mi_simple_values[] = "--simple-values";
+ const char mi_all_values[] = "--all-values";
+
extern int varobjdebug; /* defined in varobj.c */
! static int varobj_update_one (struct varobj *var,
! enum print_values print_values);
/* VAROBJ operations */
***************
*** 262,284 ****
error (_("mi_cmd_var_list_children: Usage: [PRINT_VALUES] NAME"));
/* Get varobj handle, if a valid var obj name was specified */
! if (argc == 1) var = varobj_get_handle (argv[0]);
! else var = varobj_get_handle (argv[1]);
if (var == NULL)
error (_("Variable object not found"));
numchild = varobj_list_children (var, &childlist);
ui_out_field_int (uiout, "numchild", numchild);
if (argc == 2)
! if (strcmp (argv[0], "0") == 0
! || strcmp (argv[0], "--no-values") == 0)
! print_values = PRINT_NO_VALUES;
! else if (strcmp (argv[0], "1") == 0
! || strcmp (argv[0], "--all-values") == 0)
! print_values = PRINT_ALL_VALUES;
! else
! error (_("Unknown value for PRINT_VALUES: must be: 0 or \"--no-values\", 1 or \"--all-values\""));
! else print_values = PRINT_NO_VALUES;
if (numchild <= 0)
return MI_CMD_DONE;
--- 268,296 ----
error (_("mi_cmd_var_list_children: Usage: [PRINT_VALUES] NAME"));
/* Get varobj handle, if a valid var obj name was specified */
! if (argc == 1)
! var = varobj_get_handle (argv[0]);
! else
! var = varobj_get_handle (argv[1]);
if (var == NULL)
error (_("Variable object not found"));
numchild = varobj_list_children (var, &childlist);
ui_out_field_int (uiout, "numchild", numchild);
if (argc == 2)
! {
! if (strcmp (argv[0], "0") == 0
! || strcmp (argv[0], mi_no_values) == 0)
! print_values = PRINT_NO_VALUES;
! else if (strcmp (argv[0], "1") == 0
! || strcmp (argv[0], mi_with_values) == 0)
! print_values = PRINT_ALL_VALUES;
! else
! error (_("Unknown value for PRINT_VALUES: \
! must be: 0 or \"%s\", 1 or \"%s\""), mi_no_values, mi_with_values);
! }
! else
! print_values = PRINT_NO_VALUES;
if (numchild <= 0)
return MI_CMD_DONE;
***************
*** 426,436 ****
struct cleanup *cleanup;
char *name;
int nv;
! if (argc != 1)
! error (_("mi_cmd_var_update: Usage: NAME."));
! name = argv[0];
/* Check if the parameter is a "*" which means that we want
to update all variables */
--- 438,467 ----
struct cleanup *cleanup;
char *name;
int nv;
+ enum print_values print_values;
! if (argc != 1 && argc != 2)
! error (_("mi_cmd_var_update: Usage: [PRINT_VALUES] NAME."));
! if (argc == 1)
! name = argv[0];
! else
! name = (argv[1]);
!
! if (argc == 2)
! {
! if (strcmp (argv[0], "0") == 0
! || strcmp (argv[0], mi_no_values) == 0)
! print_values = PRINT_NO_VALUES;
! else if (strcmp (argv[0], "1") == 0
! || strcmp (argv[0], mi_with_values) == 0)
! print_values = PRINT_ALL_VALUES;
! else
! error (_("Unknown value for PRINT_VALUES: \
! must be: 0 or \"%s\", 1 or \"%s\""), mi_no_values, mi_with_values);
! }
! else
! print_values = PRINT_NO_VALUES;
/* Check if the parameter is a "*" which means that we want
to update all variables */
***************
*** 450,456 ****
cr = rootlist;
while (*cr != NULL)
{
! varobj_update_one (*cr);
cr++;
}
xfree (rootlist);
--- 481,487 ----
cr = rootlist;
while (*cr != NULL)
{
! varobj_update_one (*cr, print_values);
cr++;
}
xfree (rootlist);
***************
*** 467,473 ****
cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "changelist");
else
cleanup = make_cleanup_ui_out_list_begin_end (uiout, "changelist");
! varobj_update_one (var);
do_cleanups (cleanup);
}
return MI_CMD_DONE;
--- 498,504 ----
cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "changelist");
else
cleanup = make_cleanup_ui_out_list_begin_end (uiout, "changelist");
! varobj_update_one (var, print_values);
do_cleanups (cleanup);
}
return MI_CMD_DONE;
***************
*** 478,484 ****
scope), and 1 if it succeeds. */
static int
! varobj_update_one (struct varobj *var)
{
struct varobj **changelist;
struct varobj **cc;
--- 509,515 ----
scope), and 1 if it succeeds. */
static int
! varobj_update_one (struct varobj *var, enum print_values print_values)
{
struct varobj **changelist;
struct varobj **cc;
***************
*** 524,529 ****
--- 555,562 ----
if (mi_version (uiout) > 1)
cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
ui_out_field_string (uiout, "name", varobj_get_objname (*cc));
+ if (print_values)
+ ui_out_field_string (uiout, "value", varobj_get_value (*cc));
ui_out_field_string (uiout, "in_scope", "true");
ui_out_field_string (uiout, "type_changed", "false");
if (mi_version (uiout) > 1)
*** /home/nick/src/gdb/mi/mi-cmd-stack.c.~1.25.~ 2005-02-13 00:36:20.000000000 +1300
--- /home/nick/src/gdb/mi/mi-cmd-stack.c 2005-05-02 16:55:27.000000000 +1200
***************
*** 142,157 ****
frame = get_selected_frame (NULL);
if (strcmp (argv[0], "0") == 0
! || strcmp (argv[0], "--no-values") == 0)
print_values = PRINT_NO_VALUES;
else if (strcmp (argv[0], "1") == 0
! || strcmp (argv[0], "--all-values") == 0)
print_values = PRINT_ALL_VALUES;
else if (strcmp (argv[0], "2") == 0
! || strcmp (argv[0], "--simple-values") == 0)
print_values = PRINT_SIMPLE_VALUES;
else
! error (_("Unknown value for PRINT_VALUES: must be: 0 or \"--no-values\", 1 or \"--all-values\", 2 or \"--simple-values\""));
list_args_or_locals (1, print_values, frame);
return MI_CMD_DONE;
}
--- 142,159 ----
frame = get_selected_frame (NULL);
if (strcmp (argv[0], "0") == 0
! || strcmp (argv[0], mi_no_values) == 0)
print_values = PRINT_NO_VALUES;
else if (strcmp (argv[0], "1") == 0
! || strcmp (argv[0], mi_all_values) == 0)
print_values = PRINT_ALL_VALUES;
else if (strcmp (argv[0], "2") == 0
! || strcmp (argv[0], mi_simple_values) == 0)
print_values = PRINT_SIMPLE_VALUES;
else
! error (_("Unknown value for PRINT_VALUES: must be: \
! 0 or \"%s\", 1 or \"%s\", 2 or \"%s\""),
! mi_no_values, mi_all_values, mi_simple_values);
list_args_or_locals (1, print_values, frame);
return MI_CMD_DONE;
}
*** /home/nick/src/gdb/doc/gdb.texinfo.~1.249.~ 2005-05-02 14:28:29.000000000 +1200
--- /home/nick/src/gdb/doc/gdb.texinfo 2005-05-02 19:12:12.000000000 +1200
***************
*** 20331,20336 ****
--- 20331,20342 ----
variables. With an optional preceding argument of 1 or @code{--all-values},
also prints their values.
+ Returns a list of the children of the specified variable object. With
+ just the variable object name as an argument or with an optional
+ preceding argument of 0 or @code{--no-values}, prints only the names
+ of the variables. With an optional value for @var{print-values} of 1
+ or @code{--with-values}, also prints their values.
+
@subsubheading Example
@smallexample
***************
*** 20451,20463 ****
@subsubheading Synopsis
@smallexample
! -var-update @{@var{name} | "*"@}
@end smallexample
Update the value of the variable object @var{name} by evaluating its
expression after fetching all the new values from memory or registers.
! A @samp{*} causes all existing variable objects to be updated.
@node Annotations
@chapter @value{GDBN} Annotations
--- 20457,20485 ----
@subsubheading Synopsis
@smallexample
! -var-update [@var{print-values}] @{@var{name} | "*"@}
@end smallexample
Update the value of the variable object @var{name} by evaluating its
expression after fetching all the new values from memory or registers.
! A @samp{*} causes all existing variable objects to be updated. With
! just a single argument or with an optional value for
! @var{print-values} of 0 or @code{--no-values}, prints only the names
! of the variables. A value for @var{print-values} of 1 or
! @code{--with-values}, also prints their values.
!
! @subsubheading Example
+ @smallexample
+ (@value{GDBP})
+ -var-assign var1 3
+ ^done,value="3"
+ (@value{GDBP})
+ -var-update --all-values var1
+ ^done,changelist=[@{name="var1",value="3",in_scope="true",
+ type_changed="false"@}]
+ (@value{GDBP})
+ @end smallexample
@node Annotations
@chapter @value{GDBN} Annotations