📄 mi-cmd-var.c
字号:
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; 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 (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", varobj_get_type (*cc)); do_cleanups (cleanup_child); cc++; } do_cleanups (cleanup_children); xfree (childlist); return MI_CMD_DONE;}enum mi_cmd_resultmi_cmd_var_info_type (char *command, char **argv, int argc){ struct varobj *var; if (argc != 1) error ("mi_cmd_var_info_type: 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_type: Variable object not found"); ui_out_field_string (uiout, "type", varobj_get_type (var)); return MI_CMD_DONE;}enum mi_cmd_resultmi_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;}enum mi_cmd_resultmi_cmd_var_show_attributes (char *command, char **argv, int argc){ int attr; char *attstr; struct varobj *var; if (argc != 1) error ("mi_cmd_var_show_attributes: 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_show_attributes: Variable object not found"); attr = varobj_get_attributes (var); /* FIXME: define masks for attributes */ if (attr & 0x00000001) attstr = "editable"; else attstr = "noneditable"; ui_out_field_string (uiout, "attr", attstr); return MI_CMD_DONE;}enum mi_cmd_resultmi_cmd_var_evaluate_expression (char *command, char **argv, int argc){ struct varobj *var; if (argc != 1) error ("mi_cmd_var_evaluate_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_evaluate_expression: Variable object not found"); ui_out_field_string (uiout, "value", varobj_get_value (var)); return MI_CMD_DONE;}enum mi_cmd_resultmi_cmd_var_assign (char *command, char **argv, int argc){ struct varobj *var; char *expression; if (argc != 2) error ("mi_cmd_var_assign: Usage: NAME EXPRESSION."); /* Get varobj handle, if a valid var obj name was specified */ var = varobj_get_handle (argv[0]); if (var == NULL) error ("mi_cmd_var_assign: Variable object not found"); /* FIXME: define masks for attributes */ if (!(varobj_get_attributes (var) & 0x00000001)) error ("mi_cmd_var_assign: Variable object is not editable"); expression = xstrdup (argv[1]); if (!varobj_set_value (var, expression)) error ("mi_cmd_var_assign: Could not assign expression to varible object"); ui_out_field_string (uiout, "value", varobj_get_value (var)); return MI_CMD_DONE;}enum mi_cmd_resultmi_cmd_var_update (char *command, char **argv, int argc){ struct varobj *var; struct varobj **rootlist; struct varobj **cr; 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 */ if ((*name == '*') && (*(name + 1) == '\0')) { nv = varobj_list (&rootlist); if (mi_version (uiout) <= 1) cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "changelist"); else cleanup = make_cleanup_ui_out_list_begin_end (uiout, "changelist"); if (nv <= 0) { do_cleanups (cleanup); return MI_CMD_DONE; } cr = rootlist; while (*cr != NULL) { varobj_update_one (*cr); cr++; } xfree (rootlist); do_cleanups (cleanup); } else { /* Get varobj handle, if a valid var obj name was specified */ var = varobj_get_handle (name); if (var == NULL) error ("mi_cmd_var_update: Variable object not found"); if (mi_version (uiout) <= 1) 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;}/* Helper for mi_cmd_var_update() Returns 0 if the update for the variable fails (usually because the variable is out of scope), and 1 if it succeeds. */static intvarobj_update_one (struct varobj *var){ struct varobj **changelist; struct varobj **cc; struct cleanup *cleanup = NULL; int nc; nc = varobj_update (&var, &changelist); /* nc == 0 means that nothing has changed. nc == -1 means that an error occured in updating the variable. nc == -2 means the variable has changed type. */ if (nc == 0) return 1; else if (nc == -1) { if (mi_version (uiout) > 1) cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); ui_out_field_string (uiout, "name", varobj_get_objname(var)); ui_out_field_string (uiout, "in_scope", "false"); if (mi_version (uiout) > 1) do_cleanups (cleanup); return -1; } else if (nc == -2) { if (mi_version (uiout) > 1) cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); ui_out_field_string (uiout, "name", varobj_get_objname (var)); ui_out_field_string (uiout, "in_scope", "true"); ui_out_field_string (uiout, "new_type", varobj_get_type(var)); ui_out_field_int (uiout, "new_num_children", varobj_get_num_children(var)); if (mi_version (uiout) > 1) do_cleanups (cleanup); } else { cc = changelist; while (*cc != NULL) { 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)); ui_out_field_string (uiout, "in_scope", "true"); ui_out_field_string (uiout, "type_changed", "false"); if (mi_version (uiout) > 1) do_cleanups (cleanup); cc++; } xfree (changelist); return 1; } return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -