enum mi_cmd_result mi_cmd_var_list_children (char *command, char **argv, int argc) { struct varobj *var; struct varobj **childlist; struct varobj **cc; struct cleanup *cleanup_children; int numchild; char *type; enum print_values print_values; if (argc != 1 && argc != 2) 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) print_values = mi_parse_values_option (argv[0]); else print_values = PRINT_NO_VALUES; if (numchild <= 0) return MI_CMD_DONE; if (mi_version (uiout) == 1) cleanup_children = make_cleanup_ui_out_tuple_begin_end (uiout, "children"); else cleanup_children = make_cleanup_ui_out_list_begin_end (uiout, "children"); cc = childlist; while (*cc != NULL) { struct cleanup *cleanup_child; cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, "child"); ui_out_field_string (uiout, "name", varobj_get_objname (*cc)); ui_out_field_string (uiout, "exp", varobj_get_expression (*cc)); ui_out_field_int (uiout, "numchild", varobj_get_num_children (*cc)); if (mi_print_value_p (varobj_get_gdb_type (*cc), print_values)) ui_out_field_string (uiout, "value", varobj_get_value (*cc)); type = varobj_get_type (*cc); /* C++ pseudo-variables (public, private, protected) do not have a type */ if (type) ui_out_field_string (uiout, "type", type); do_cleanups (cleanup_child); cc++; } do_cleanups (cleanup_children); xfree (childlist); return MI_CMD_DONE; }
static void print_varobj (struct varobj *var, enum print_values print_values, int print_expression) { struct ui_out *uiout = current_uiout; char *type; int thread_id; char *display_hint; ui_out_field_string (uiout, "name", varobj_get_objname (var)); if (print_expression) { char *exp = varobj_get_expression (var); ui_out_field_string (uiout, "exp", exp); xfree (exp); } ui_out_field_int (uiout, "numchild", varobj_get_num_children (var)); if (mi_print_value_p (var, print_values)) { char *val = varobj_get_value (var); ui_out_field_string (uiout, "value", val); xfree (val); } type = varobj_get_type (var); if (type != NULL) { ui_out_field_string (uiout, "type", type); xfree (type); } thread_id = varobj_get_thread_id (var); if (thread_id > 0) ui_out_field_int (uiout, "thread-id", thread_id); if (varobj_get_frozen (var)) ui_out_field_int (uiout, "frozen", 1); display_hint = varobj_get_display_hint (var); if (display_hint) { ui_out_field_string (uiout, "displayhint", display_hint); xfree (display_hint); } if (varobj_is_dynamic_p (var)) ui_out_field_int (uiout, "dynamic", 1); }
enum mi_cmd_result mi_cmd_var_info_expression (char *command, char **argv, int argc) { enum varobj_languages lang; struct varobj *var; if (argc != 1) error ("mi_cmd_var_info_expression: Usage: NAME."); /* Get varobj handle, if a valid var obj name was specified */ var = varobj_get_handle (argv[0]); if (var == NULL) error ("mi_cmd_var_info_expression: Variable object not found"); lang = varobj_get_language (var); ui_out_field_string (uiout, "lang", varobj_language_string[(int) lang]); ui_out_field_string (uiout, "exp", varobj_get_expression (var)); return MI_CMD_DONE; }
void mi_cmd_var_info_expression (char *command, char **argv, int argc) { struct ui_out *uiout = current_uiout; const struct language_defn *lang; struct varobj *var; char *exp; if (argc != 1) error (_("-var-info-expression: Usage: NAME.")); /* Get varobj handle, if a valid var obj name was specified. */ var = varobj_get_handle (argv[0]); lang = varobj_get_language (var); ui_out_field_string (uiout, "lang", lang->la_natural_name); exp = varobj_get_expression (var); ui_out_field_string (uiout, "exp", exp); xfree (exp); }