1 /* MI Command Set - stack commands.
2 Copyright (C) 2000-2024 Free Software Foundation, Inc.
3 Contributed by Cygnus Solutions (a Red Hat company).
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
29 #include "dictionary.h"
33 #include "mi-getopt.h"
34 #include "extension.h"
38 #include "gdbsupport/gdb-safe-ctype.h"
40 #include "observable.h"
42 enum what_to_list
{ locals
, arguments
, all
};
44 static void list_args_or_locals (const frame_print_options
&fp_opts
,
45 enum what_to_list what
,
46 enum print_values values
,
48 int skip_unavailable
);
50 /* True if we want to allow Python-based frame filters. */
51 static int frame_filters
= 0;
54 mi_cmd_enable_frame_filters (const char *command
, const char *const *argv
,
58 error (_("-enable-frame-filters: no arguments allowed"));
62 /* Like apply_ext_lang_frame_filter, but take a print_values */
64 static enum ext_lang_bt_status
65 mi_apply_ext_lang_frame_filter (frame_info_ptr frame
,
66 frame_filter_flags flags
,
67 enum print_values print_values
,
69 int frame_low
, int frame_high
)
71 /* ext_lang_frame_args's MI options are compatible with MI print
73 return apply_ext_lang_frame_filter (frame
, flags
,
74 (enum ext_lang_frame_args
) print_values
,
76 frame_low
, frame_high
);
79 /* Print a list of the stack frames. Args can be none, in which case
80 we want to print the whole backtrace, or a pair of numbers
81 specifying the frame numbers at which to start and stop the
82 display. If the two numbers are equal, a single frame will be
86 mi_cmd_stack_list_frames (const char *command
, const char *const *argv
,
93 enum ext_lang_bt_status result
= EXT_LANG_BT_ERROR
;
100 static const struct mi_opt opts
[] =
102 {"-no-frame-filters", NO_FRAME_FILTERS
, 0},
106 /* Parse arguments. In this instance we are just looking for
107 --no-frame-filters. */
111 int opt
= mi_getopt ("-stack-list-frames", argc
, argv
,
115 switch ((enum opt
) opt
)
117 case NO_FRAME_FILTERS
:
123 /* After the last option is parsed, there should either be low -
124 high range, or no further arguments. */
125 if ((argc
- oind
!= 0) && (argc
- oind
!= 2))
126 error (_("-stack-list-frames: Usage: [--no-frame-filters] [FRAME_LOW FRAME_HIGH]"));
128 /* If there is a range, set it. */
129 if (argc
- oind
== 2)
131 frame_low
= atoi (argv
[0 + oind
]);
132 frame_high
= atoi (argv
[1 + oind
]);
136 /* Called with no arguments, it means we want the whole
142 /* Let's position fi on the frame at which to start the
143 display. Could be the innermost frame if the whole stack needs
144 displaying, or if frame_low is 0. */
145 for (i
= 0, fi
= get_current_frame ();
147 i
++, fi
= get_prev_frame (fi
));
150 error (_("-stack-list-frames: Not enough frames in stack."));
152 ui_out_emit_list
list_emitter (current_uiout
, "stack");
154 if (! raw_arg
&& frame_filters
)
156 frame_filter_flags flags
= PRINT_LEVEL
| PRINT_FRAME_INFO
;
157 int py_frame_low
= frame_low
;
159 /* We cannot pass -1 to frame_low, as that would signify a
160 relative backtrace from the tail of the stack. So, in the case
161 of frame_low == -1, assign and increment it. */
162 if (py_frame_low
== -1)
165 result
= apply_ext_lang_frame_filter (get_current_frame (), flags
,
166 NO_VALUES
, current_uiout
,
167 py_frame_low
, frame_high
);
170 /* Run the inbuilt backtrace if there are no filters registered, or
171 if "--no-frame-filters" has been specified from the command. */
172 if (! frame_filters
|| raw_arg
|| result
== EXT_LANG_BT_NO_FILTERS
)
174 /* Now let's print the frames up to frame_high, or until there are
175 frames in the stack. */
177 fi
&& (i
<= frame_high
|| frame_high
== -1);
178 i
++, fi
= get_prev_frame (fi
))
181 /* Print the location and the address always, even for level 0.
182 If args is 0, don't print the arguments. */
183 print_frame_info (user_frame_print_options
,
184 fi
, 1, LOC_AND_ADDRESS
, 0 /* args */, 0);
190 mi_cmd_stack_info_depth (const char *command
, const char *const *argv
,
198 error (_("-stack-info-depth: Usage: [MAX_DEPTH]"));
201 frame_high
= atoi (argv
[0]);
203 /* Called with no arguments, it means we want the real depth of
207 for (i
= 0, fi
= get_current_frame ();
208 fi
&& (i
< frame_high
|| frame_high
== -1);
209 i
++, fi
= get_prev_frame (fi
))
212 current_uiout
->field_signed ("depth", i
);
215 /* Print a list of the locals for the current frame. With argument of
216 0, print only the names, with argument of 1 print also the
220 mi_cmd_stack_list_locals (const char *command
, const char *const *argv
,
223 frame_info_ptr frame
;
225 enum ext_lang_bt_status result
= EXT_LANG_BT_ERROR
;
226 enum print_values print_value
;
228 int skip_unavailable
= 0;
237 static const struct mi_opt opts
[] =
239 {"-no-frame-filters", NO_FRAME_FILTERS
, 0},
240 {"-skip-unavailable", SKIP_UNAVAILABLE
, 0},
247 /* Don't parse 'print-values' as an option. */
248 int opt
= mi_getopt ("-stack-list-locals", argc
- 1, argv
,
253 switch ((enum opt
) opt
)
255 case NO_FRAME_FILTERS
:
258 case SKIP_UNAVAILABLE
:
259 skip_unavailable
= 1;
265 /* After the last option is parsed, there should be only
267 if (argc
- oind
!= 1)
268 error (_("-stack-list-locals: Usage: [--no-frame-filters] "
269 "[--skip-unavailable] PRINT_VALUES"));
271 frame
= get_selected_frame (NULL
);
272 print_value
= mi_parse_print_values (argv
[oind
]);
274 if (! raw_arg
&& frame_filters
)
276 frame_filter_flags flags
= PRINT_LEVEL
| PRINT_LOCALS
;
278 result
= mi_apply_ext_lang_frame_filter (frame
, flags
, print_value
,
279 current_uiout
, 0, 0);
282 /* Run the inbuilt backtrace if there are no filters registered, or
283 if "--no-frame-filters" has been specified from the command. */
284 if (! frame_filters
|| raw_arg
|| result
== EXT_LANG_BT_NO_FILTERS
)
286 list_args_or_locals (user_frame_print_options
,
287 locals
, print_value
, frame
,
292 /* Print a list of the arguments for the current frame. With argument
293 of 0, print only the names, with argument of 1 print also the
297 mi_cmd_stack_list_args (const char *command
, const char *const *argv
, int argc
)
303 enum print_values print_values
;
304 struct ui_out
*uiout
= current_uiout
;
307 int skip_unavailable
= 0;
308 enum ext_lang_bt_status result
= EXT_LANG_BT_ERROR
;
314 static const struct mi_opt opts
[] =
316 {"-no-frame-filters", NO_FRAME_FILTERS
, 0},
317 {"-skip-unavailable", SKIP_UNAVAILABLE
, 0},
324 int opt
= mi_getopt_allow_unknown ("-stack-list-args", argc
, argv
,
329 switch ((enum opt
) opt
)
331 case NO_FRAME_FILTERS
:
334 case SKIP_UNAVAILABLE
:
335 skip_unavailable
= 1;
340 if (argc
- oind
!= 1 && argc
- oind
!= 3)
341 error (_("-stack-list-arguments: Usage: " \
342 "[--no-frame-filters] [--skip-unavailable] "
343 "PRINT_VALUES [FRAME_LOW FRAME_HIGH]"));
345 if (argc
- oind
== 3)
347 frame_low
= atoi (argv
[1 + oind
]);
348 frame_high
= atoi (argv
[2 + oind
]);
352 /* Called with no arguments, it means we want args for the whole
358 print_values
= mi_parse_print_values (argv
[oind
]);
360 /* Let's position fi on the frame at which to start the
361 display. Could be the innermost frame if the whole stack needs
362 displaying, or if frame_low is 0. */
363 for (i
= 0, fi
= get_current_frame ();
365 i
++, fi
= get_prev_frame (fi
));
368 error (_("-stack-list-arguments: Not enough frames in stack."));
370 ui_out_emit_list
list_emitter (uiout
, "stack-args");
372 if (! raw_arg
&& frame_filters
)
374 frame_filter_flags flags
= PRINT_LEVEL
| PRINT_ARGS
;
375 int py_frame_low
= frame_low
;
377 /* We cannot pass -1 to frame_low, as that would signify a
378 relative backtrace from the tail of the stack. So, in the case
379 of frame_low == -1, assign and increment it. */
380 if (py_frame_low
== -1)
383 result
= mi_apply_ext_lang_frame_filter (get_current_frame (), flags
,
384 print_values
, current_uiout
,
385 py_frame_low
, frame_high
);
388 /* Run the inbuilt backtrace if there are no filters registered, or
389 if "--no-frame-filters" has been specified from the command. */
390 if (! frame_filters
|| raw_arg
|| result
== EXT_LANG_BT_NO_FILTERS
)
392 /* Now let's print the frames up to frame_high, or until there are
393 frames in the stack. */
395 fi
&& (i
<= frame_high
|| frame_high
== -1);
396 i
++, fi
= get_prev_frame (fi
))
399 ui_out_emit_tuple
tuple_emitter (uiout
, "frame");
400 uiout
->field_signed ("level", i
);
401 list_args_or_locals (user_frame_print_options
,
402 arguments
, print_values
, fi
, skip_unavailable
);
407 /* Print a list of the local variables (including arguments) for the
408 current frame. ARGC must be 1 and ARGV[0] specify if only the names,
409 or both names and values of the variables must be printed. See
410 parse_print_value for possible values. */
413 mi_cmd_stack_list_variables (const char *command
, const char *const *argv
,
416 frame_info_ptr frame
;
418 enum ext_lang_bt_status result
= EXT_LANG_BT_ERROR
;
419 enum print_values print_value
;
421 int skip_unavailable
= 0;
430 static const struct mi_opt opts
[] =
432 {"-no-frame-filters", NO_FRAME_FILTERS
, 0},
433 {"-skip-unavailable", SKIP_UNAVAILABLE
, 0},
440 /* Don't parse 'print-values' as an option. */
441 int opt
= mi_getopt ("-stack-list-variables", argc
- 1,
442 argv
, opts
, &oind
, &oarg
);
445 switch ((enum opt
) opt
)
447 case NO_FRAME_FILTERS
:
450 case SKIP_UNAVAILABLE
:
451 skip_unavailable
= 1;
457 /* After the last option is parsed, there should be only
459 if (argc
- oind
!= 1)
460 error (_("-stack-list-variables: Usage: [--no-frame-filters] " \
461 "[--skip-unavailable] PRINT_VALUES"));
463 frame
= get_selected_frame (NULL
);
464 print_value
= mi_parse_print_values (argv
[oind
]);
466 if (! raw_arg
&& frame_filters
)
468 frame_filter_flags flags
= PRINT_LEVEL
| PRINT_ARGS
| PRINT_LOCALS
;
470 result
= mi_apply_ext_lang_frame_filter (frame
, flags
,
472 current_uiout
, 0, 0);
475 /* Run the inbuilt backtrace if there are no filters registered, or
476 if "--no-frame-filters" has been specified from the command. */
477 if (! frame_filters
|| raw_arg
|| result
== EXT_LANG_BT_NO_FILTERS
)
479 list_args_or_locals (user_frame_print_options
,
480 all
, print_value
, frame
,
485 /* Print single local or argument. ARG must be already read in. For
486 WHAT and VALUES see list_args_or_locals.
488 Errors are printed as if they would be the parameter value. Use
489 zeroed ARG iff it should not be printed according to VALUES. If
490 SKIP_UNAVAILABLE is true, only print ARG if it is available. */
493 list_arg_or_local (const struct frame_arg
*arg
, enum what_to_list what
,
494 enum print_values values
, int skip_unavailable
)
496 struct ui_out
*uiout
= current_uiout
;
498 gdb_assert (!arg
->val
|| !arg
->error
);
499 gdb_assert ((values
== PRINT_NO_VALUES
&& arg
->val
== NULL
500 && arg
->error
== NULL
)
501 || values
== PRINT_SIMPLE_VALUES
502 || (values
== PRINT_ALL_VALUES
503 && (arg
->val
!= NULL
|| arg
->error
!= NULL
)));
504 gdb_assert (arg
->entry_kind
== print_entry_values_no
505 || (arg
->entry_kind
== print_entry_values_only
506 && (arg
->val
|| arg
->error
)));
508 if (skip_unavailable
&& arg
->val
!= NULL
509 && (arg
->val
->entirely_unavailable ()
510 /* A scalar object that does not have all bits available is
511 also considered unavailable, because all bits contribute
512 to its representation. */
513 || (val_print_scalar_type_p (arg
->val
->type ())
514 && !arg
->val
->bytes_available (arg
->val
->embedded_offset (),
515 arg
->val
->type ()->length ()))))
518 std::optional
<ui_out_emit_tuple
> tuple_emitter
;
519 if (values
!= PRINT_NO_VALUES
|| what
== all
)
520 tuple_emitter
.emplace (uiout
, nullptr);
524 stb
.puts (arg
->sym
->print_name ());
525 if (arg
->entry_kind
== print_entry_values_only
)
527 uiout
->field_stream ("name", stb
);
529 if (what
== all
&& arg
->sym
->is_argument ())
530 uiout
->field_signed ("arg", 1);
532 if (values
== PRINT_SIMPLE_VALUES
)
534 check_typedef (arg
->sym
->type ());
535 type_print (arg
->sym
->type (), "", &stb
, -1);
536 uiout
->field_stream ("type", stb
);
539 if (arg
->val
|| arg
->error
)
542 stb
.printf (_("<error reading variable: %s>"), arg
->error
.get ());
547 struct value_print_options opts
;
549 get_no_prettyformat_print_options (&opts
);
550 opts
.deref_ref
= true;
551 common_val_print (arg
->val
, &stb
, 0, &opts
,
552 language_def (arg
->sym
->language ()));
554 catch (const gdb_exception_error
&except
)
556 stb
.printf (_("<error reading variable: %s>"),
560 uiout
->field_stream ("value", stb
);
564 /* Print a list of the objects for the frame FI in a certain form,
565 which is determined by VALUES. The objects can be locals,
566 arguments or both, which is determined by WHAT. If SKIP_UNAVAILABLE
567 is true, only print the arguments or local variables whose values
571 list_args_or_locals (const frame_print_options
&fp_opts
,
572 enum what_to_list what
, enum print_values values
,
573 frame_info_ptr fi
, int skip_unavailable
)
575 const struct block
*block
;
576 const char *name_of_result
;
577 struct ui_out
*uiout
= current_uiout
;
579 block
= get_frame_block (fi
, 0);
584 name_of_result
= "locals";
587 name_of_result
= "args";
590 name_of_result
= "variables";
593 internal_error ("unexpected what_to_list: %d", (int) what
);
596 ui_out_emit_list
list_emitter (uiout
, name_of_result
);
600 for (struct symbol
*sym
: block_iterator_range (block
))
604 switch (sym
->aclass ())
607 case LOC_UNDEF
: /* catches errors */
608 case LOC_CONST
: /* constant */
609 case LOC_TYPEDEF
: /* local typedef */
610 case LOC_LABEL
: /* local label */
611 case LOC_BLOCK
: /* local function */
612 case LOC_CONST_BYTES
: /* loc. byte seq. */
613 case LOC_UNRESOLVED
: /* unresolved static */
614 case LOC_OPTIMIZED_OUT
: /* optimized out */
618 case LOC_ARG
: /* argument */
619 case LOC_REF_ARG
: /* reference arg */
620 case LOC_REGPARM_ADDR
: /* indirect register arg */
621 case LOC_LOCAL
: /* stack local */
622 case LOC_STATIC
: /* static */
623 case LOC_REGISTER
: /* register */
624 case LOC_COMPUTED
: /* computed location */
627 else if (what
== locals
)
628 print_me
= !sym
->is_argument ();
630 print_me
= sym
->is_argument ();
636 struct frame_arg arg
, entryarg
;
638 if (sym
->is_argument ())
639 sym2
= lookup_symbol_search_name (sym
->search_name (),
640 block
, VAR_DOMAIN
).symbol
;
643 gdb_assert (sym2
!= NULL
);
646 arg
.entry_kind
= print_entry_values_no
;
648 entryarg
.entry_kind
= print_entry_values_no
;
652 case PRINT_SIMPLE_VALUES
:
653 if (!mi_simple_type_p (sym2
->type ()))
657 case PRINT_ALL_VALUES
:
658 if (sym
->is_argument ())
659 read_frame_arg (fp_opts
, sym2
, fi
, &arg
, &entryarg
);
661 read_frame_local (sym2
, fi
, &arg
);
665 if (arg
.entry_kind
!= print_entry_values_only
)
666 list_arg_or_local (&arg
, what
, values
, skip_unavailable
);
667 if (entryarg
.entry_kind
!= print_entry_values_no
)
668 list_arg_or_local (&entryarg
, what
, values
, skip_unavailable
);
672 if (block
->function ())
675 block
= block
->superblock ();
679 /* Read a frame specification from FRAME_EXP and return the selected frame.
680 Call error() if the specification is in any way invalid (so this
681 function never returns NULL).
683 The frame specification is usually an integer level number, however if
684 the number does not match a valid frame level then it will be treated as
685 a frame address. The frame address will then be used to find a matching
686 frame in the stack. If no matching frame is found then a new frame will
689 The use of FRAME_EXP as an address is undocumented in the GDB user
690 manual, this feature is supported here purely for backward
693 static frame_info_ptr
694 parse_frame_specification (const char *frame_exp
)
696 gdb_assert (frame_exp
!= NULL
);
698 /* NOTE: Parse and evaluate expression, but do not use
699 functions such as parse_and_eval_long or
700 parse_and_eval_address to also extract the value.
701 Instead value_as_long and value_as_address are used.
702 This avoids problems with expressions that contain
704 struct value
*arg
= parse_and_eval (frame_exp
);
706 /* Assume ARG is an integer, and try using that to select a frame. */
708 int level
= value_as_long (arg
);
710 fid
= find_relative_frame (get_current_frame (), &level
);
712 /* find_relative_frame was successful. */
715 /* Convert the value into a corresponding address. */
716 CORE_ADDR addr
= value_as_address (arg
);
718 /* Assume that ADDR is an address, use that to identify a frame with a
720 struct frame_id id
= frame_id_build_wild (addr
);
722 /* If (s)he specifies the frame with an address, he deserves
723 what (s)he gets. Still, give the highest one that matches.
724 (NOTE: cagney/2004-10-29: Why highest, or outer-most, I don't
726 for (fid
= get_current_frame ();
728 fid
= get_prev_frame (fid
))
730 if (id
== get_frame_id (fid
))
732 frame_info_ptr prev_frame
;
736 prev_frame
= get_prev_frame (fid
);
738 || id
!= get_frame_id (prev_frame
))
746 /* We couldn't identify the frame as an existing frame, but
747 perhaps we can create one with a single argument. */
748 return create_new_frame (addr
, 0);
751 /* Implement the -stack-select-frame MI command. */
754 mi_cmd_stack_select_frame (const char *command
, const char *const *argv
,
757 if (argc
== 0 || argc
> 1)
758 error (_("-stack-select-frame: Usage: FRAME_SPEC"));
759 select_frame (parse_frame_specification (argv
[0]));
763 mi_cmd_stack_info_frame (const char *command
, const char *const *argv
,
767 error (_("-stack-info-frame: No arguments allowed"));
769 print_frame_info (user_frame_print_options
,
770 get_selected_frame (NULL
), 1, LOC_AND_ADDRESS
, 0, 1);