3 Copyright (C) 2000-2025 Free Software Foundation, Inc.
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/>. */
20 #include "arch-utils.h"
21 #include "exceptions.h"
22 #include "readline/tilde.h"
23 #include "completer.h"
25 #include "gdbsupport/gdb_wait.h"
26 #include "gdbsupport/gdb_regex.h"
27 #include "gdb_vfork.h"
29 #include "expression.h"
33 #include "filenames.h"
37 #include "tracepoint.h"
38 #include "gdbsupport/filestuff.h"
48 #include "cli/cli-decode.h"
49 #include "cli/cli-script.h"
50 #include "cli/cli-setshow.h"
51 #include "cli/cli-cmds.h"
52 #include "cli/cli-style.h"
53 #include "cli/cli-utils.h"
55 #include "extension.h"
56 #include "gdbsupport/pathstuff.h"
57 #include "gdbsupport/gdb_tilde_expand.h"
58 #include "gdbsupport/eintr.h"
68 /* Prototypes for local utility functions */
70 static void print_sal_location (const symtab_and_line
&sal
);
72 static void ambiguous_line_spec (gdb::array_view
<const symtab_and_line
> sals
,
73 const char *format
, ...)
74 ATTRIBUTE_PRINTF (2, 3);
76 static void filter_sals (std::vector
<symtab_and_line
> &);
80 unsigned int max_user_call_depth
= 1024;
82 /* Define all cmd_list_elements. */
84 /* Chain containing all defined commands. */
86 struct cmd_list_element
*cmdlist
;
88 /* Chain containing all defined info subcommands. */
90 struct cmd_list_element
*infolist
;
92 /* Chain containing all defined enable subcommands. */
94 struct cmd_list_element
*enablelist
;
96 /* Chain containing all defined disable subcommands. */
98 struct cmd_list_element
*disablelist
;
100 /* Chain containing all defined stop subcommands. */
102 struct cmd_list_element
*stoplist
;
104 /* Chain containing all defined delete subcommands. */
106 struct cmd_list_element
*deletelist
;
108 /* Chain containing all defined detach subcommands. */
110 struct cmd_list_element
*detachlist
;
112 /* Chain containing all defined kill subcommands. */
114 struct cmd_list_element
*killlist
;
116 /* Chain containing all defined set subcommands */
118 struct cmd_list_element
*setlist
;
120 /* Chain containing all defined unset subcommands */
122 struct cmd_list_element
*unsetlist
;
124 /* Chain containing all defined show subcommands. */
126 struct cmd_list_element
*showlist
;
128 /* Chain containing all defined \"set history\". */
130 struct cmd_list_element
*sethistlist
;
132 /* Chain containing all defined \"show history\". */
134 struct cmd_list_element
*showhistlist
;
136 /* Chain containing all defined \"unset history\". */
138 struct cmd_list_element
*unsethistlist
;
140 /* Chain containing all defined maintenance subcommands. */
142 struct cmd_list_element
*maintenancelist
;
144 /* Chain containing all defined "maintenance info" subcommands. */
146 struct cmd_list_element
*maintenanceinfolist
;
148 /* Chain containing all defined "maintenance print" subcommands. */
150 struct cmd_list_element
*maintenanceprintlist
;
152 /* Chain containing all defined "maintenance check" subcommands. */
154 struct cmd_list_element
*maintenancechecklist
;
156 /* Chain containing all defined "maintenance flush" subcommands. */
158 struct cmd_list_element
*maintenanceflushlist
;
160 struct cmd_list_element
*setprintlist
;
162 struct cmd_list_element
*showprintlist
;
164 struct cmd_list_element
*setdebuglist
;
166 struct cmd_list_element
*showdebuglist
;
168 struct cmd_list_element
*setchecklist
;
170 struct cmd_list_element
*showchecklist
;
172 struct cmd_list_element
*setsourcelist
;
174 struct cmd_list_element
*showsourcelist
;
176 /* Command tracing state. */
178 int source_verbose
= 0;
179 bool trace_commands
= false;
181 /* 'script-extension' option support. */
183 static const char script_ext_off
[] = "off";
184 static const char script_ext_soft
[] = "soft";
185 static const char script_ext_strict
[] = "strict";
187 static const char *const script_ext_enums
[] = {
194 static const char *script_ext_mode
= script_ext_soft
;
197 /* User-controllable flag to suppress event notification on CLI. */
199 static bool user_wants_cli_suppress_notification
= false;
201 /* Utility used everywhere when at least one argument is needed and
205 error_no_arg (const char *why
)
207 error (_("Argument required (%s)."), why
);
210 /* This implements the "info" prefix command. Normally such commands
211 are automatically handled by add_basic_prefix_cmd, but in this case
212 a separate command is used so that it can be hooked into by
216 info_command (const char *arg
, int from_tty
)
218 help_list (infolist
, "info", all_commands
, gdb_stdout
);
221 /* See cli/cli-cmds.h. */
224 with_command_1 (const char *set_cmd_prefix
,
225 cmd_list_element
*setlist
, const char *args
, int from_tty
)
228 error (_("Missing arguments."));
230 const char *delim
= strstr (args
, "--");
231 const char *nested_cmd
= nullptr;
234 error (_("Missing setting before '--' delimiter"));
236 if (delim
== nullptr || *skip_spaces (&delim
[2]) == '\0')
237 nested_cmd
= repeat_previous ();
239 cmd_list_element
*set_cmd
= lookup_cmd (&args
, setlist
, set_cmd_prefix
,
241 /*allow_unknown=*/ 0,
242 /*ignore_help_classes=*/ 1);
243 gdb_assert (set_cmd
!= nullptr);
245 if (!set_cmd
->var
.has_value ())
246 error (_("Cannot use this setting with the \"with\" command"));
248 std::string temp_value
249 = (delim
== nullptr ? args
: std::string (args
, delim
- args
));
251 if (nested_cmd
== nullptr)
252 nested_cmd
= skip_spaces (delim
+ 2);
254 gdb_assert (set_cmd
->var
.has_value ());
255 std::string org_value
= get_setshow_command_value_string (*set_cmd
->var
);
257 /* Tweak the setting to the new temporary value. */
258 do_set_command (temp_value
.c_str (), from_tty
, set_cmd
);
262 scoped_restore save_async
= make_scoped_restore (¤t_ui
->async
, 0);
264 /* Execute the nested command. */
265 execute_command (nested_cmd
, from_tty
);
267 catch (const gdb_exception
&ex
)
269 /* Restore the setting and rethrow. If restoring the setting
270 throws, swallow the new exception and warn. There's nothing
271 else we can reasonably do. */
274 do_set_command (org_value
.c_str (), from_tty
, set_cmd
);
276 catch (const gdb_exception
&ex2
)
278 warning (_("Couldn't restore setting: %s"), ex2
.what ());
284 /* Restore the setting. */
285 do_set_command (org_value
.c_str (), from_tty
, set_cmd
);
288 /* See cli/cli-cmds.h. */
291 with_command_completer_1 (const char *set_cmd_prefix
,
292 completion_tracker
&tracker
,
295 tracker
.set_use_custom_word_point (true);
297 const char *delim
= strstr (text
, "--");
299 /* If we're still not past the "--" delimiter, complete the "with"
300 command as if it was a "set" command. */
303 || !isspace (delim
[-1])
304 || !(isspace (delim
[2]) || delim
[2] == '\0'))
306 std::string new_text
= std::string (set_cmd_prefix
) + text
;
307 tracker
.advance_custom_word_point_by (-(int) strlen (set_cmd_prefix
));
308 complete_nested_command_line (tracker
, new_text
.c_str ());
312 /* We're past the "--" delimiter. Complete on the sub command. */
313 const char *nested_cmd
= skip_spaces (delim
+ 2);
314 tracker
.advance_custom_word_point_by (nested_cmd
- text
);
315 complete_nested_command_line (tracker
, nested_cmd
);
318 /* The "with" command. */
321 with_command (const char *args
, int from_tty
)
323 with_command_1 ("set ", setlist
, args
, from_tty
);
326 /* "with" command completer. */
329 with_command_completer (struct cmd_list_element
*ignore
,
330 completion_tracker
&tracker
,
331 const char *text
, const char * /*word*/)
333 with_command_completer_1 ("set ", tracker
, text
);
336 /* Look up the contents of TEXT as a command usable with default args.
337 Throws an error if no such command is found.
338 Return the found command and advances TEXT past the found command.
339 If the found command is a postfix command, set *PREFIX_CMD to its
342 static struct cmd_list_element
*
343 lookup_cmd_for_default_args (const char **text
,
344 struct cmd_list_element
**prefix_cmd
)
346 const char *orig_text
= *text
;
347 struct cmd_list_element
*lcmd
;
349 if (*text
== nullptr || skip_spaces (*text
) == nullptr)
350 error (_("ALIAS missing."));
352 /* We first use lookup_cmd to verify TEXT unambiguously identifies
354 lcmd
= lookup_cmd (text
, cmdlist
, "", NULL
,
355 /*allow_unknown=*/ 0,
356 /*ignore_help_classes=*/ 1);
358 /* Note that we accept default args for prefix commands,
359 as a prefix command can also be a valid usable
360 command accepting some arguments.
361 For example, "thread apply" applies a command to a
362 list of thread ids, and is also the prefix command for
365 /* We have an unambiguous command for which default args
366 can be specified. What remains after having found LCMD
367 is either spaces, or the default args character. */
369 /* We then use lookup_cmd_composition to detect if the user
370 has specified an alias, and find the possible prefix_cmd
372 struct cmd_list_element
*alias
, *cmd
;
373 lookup_cmd_composition
374 (std::string (orig_text
, *text
- orig_text
).c_str (),
375 &alias
, prefix_cmd
, &cmd
);
376 gdb_assert (cmd
!= nullptr);
377 gdb_assert (cmd
== lcmd
);
378 if (alias
!= nullptr)
384 /* Provide documentation on command or list given by COMMAND. FROM_TTY
388 help_command (const char *command
, int from_tty
)
390 help_cmd (command
, gdb_stdout
);
394 /* Note: The "complete" command is used by Emacs to implement completion.
395 [Is that why this function writes output with *_unfiltered?] */
398 complete_command (const char *arg
, int from_tty
)
402 if (max_completions
== 0)
404 /* Only print this for non-mi frontends. An MI frontend may not
405 be able to handle this. */
406 if (!current_uiout
->is_mi_like_p ())
408 printf_unfiltered (_("max-completions is zero,"
409 " completion is disabled.\n"));
417 int quote_char
= '\0';
420 completion_result result
= complete (arg
, &word
, "e_char
);
422 if (result
.number_matches
!= 0)
424 std::string
arg_prefix (arg
, word
- arg
);
426 result
.print_matches (arg_prefix
, word
, quote_char
);
431 is_complete_command (struct cmd_list_element
*c
)
433 return cmd_simple_func_eq (c
, complete_command
);
437 show_version (const char *args
, int from_tty
)
439 print_gdb_version (gdb_stdout
, true);
444 show_configuration (const char *args
, int from_tty
)
446 print_gdb_configuration (gdb_stdout
);
449 /* Handle the quit command. */
452 quit_command (const char *args
, int from_tty
)
456 /* An optional expression may be used to cause gdb to terminate with
457 the value of that expression. */
460 struct value
*val
= parse_and_eval (args
);
462 exit_code
= (int) value_as_long (val
);
465 if (!quit_confirm ())
466 error (_("Not confirmed."));
470 query_if_trace_running (from_tty
);
472 catch (const gdb_exception_error
&ex
)
474 if (ex
.error
== TARGET_CLOSE_ERROR
)
475 /* We don't care about this since we're quitting anyway, so keep
477 exception_print (gdb_stderr
, ex
);
479 /* Rethrow, to properly handle error (_("Not confirmed.")). */
483 quit_force (args
? &exit_code
: NULL
, from_tty
);
487 pwd_command (const char *args
, int from_tty
)
490 error (_("The \"pwd\" command does not take an argument: %s"), args
);
492 gdb::unique_xmalloc_ptr
<char> cwd (getcwd (NULL
, 0));
495 error (_("Error finding name of working directory: %s"),
496 safe_strerror (errno
));
498 if (strcmp (cwd
.get (), current_directory
) != 0)
499 gdb_printf (_("Working directory %ps\n (canonically %ps).\n"),
500 styled_string (file_name_style
.style (),
502 styled_string (file_name_style
.style (), cwd
.get ()));
504 gdb_printf (_("Working directory %ps.\n"),
505 styled_string (file_name_style
.style (),
510 cd_command (const char *dir
, int from_tty
)
513 /* Found something other than leading repetitions of "/..". */
517 /* If the new directory is absolute, repeat is a no-op; if relative,
518 repeat might be useful but is more likely to be a mistake. */
521 gdb::unique_xmalloc_ptr
<char> dir_holder
522 (tilde_expand (dir
!= NULL
? dir
: "~"));
523 dir
= dir_holder
.get ();
526 perror_with_name (dir
);
528 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
529 /* There's too much mess with DOSish names like "d:", "d:.",
530 "d:./foo" etc. Instead of having lots of special #ifdef'ed code,
531 simply get the canonicalized name of the current directory. */
532 gdb::unique_xmalloc_ptr
<char> cwd (getcwd (NULL
, 0));
537 if (IS_DIR_SEPARATOR (dir
[len
- 1]))
539 /* Remove the trailing slash unless this is a root directory
540 (including a drive letter on non-Unix systems). */
541 if (!(len
== 1) /* "/" */
542 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
543 && !(len
== 3 && dir
[1] == ':') /* "d:/" */
549 dir_holder
.reset (savestring (dir
, len
));
550 if (IS_ABSOLUTE_PATH (dir_holder
.get ()))
552 xfree (current_directory
);
553 current_directory
= dir_holder
.release ();
557 if (IS_DIR_SEPARATOR (current_directory
[strlen (current_directory
) - 1]))
558 current_directory
= concat (current_directory
, dir_holder
.get (),
561 current_directory
= concat (current_directory
, SLASH_STRING
,
562 dir_holder
.get (), (char *) NULL
);
565 /* Now simplify any occurrences of `.' and `..' in the pathname. */
568 for (p
= current_directory
; *p
;)
570 if (IS_DIR_SEPARATOR (p
[0]) && p
[1] == '.'
571 && (p
[2] == 0 || IS_DIR_SEPARATOR (p
[2])))
572 memmove (p
, p
+ 2, strlen (p
+ 2) + 1);
573 else if (IS_DIR_SEPARATOR (p
[0]) && p
[1] == '.' && p
[2] == '.'
574 && (p
[3] == 0 || IS_DIR_SEPARATOR (p
[3])))
578 /* Search backwards for the directory just before the "/.."
579 and obliterate it and the "/..". */
582 while (q
!= current_directory
&& !IS_DIR_SEPARATOR (q
[-1]))
585 if (q
== current_directory
)
586 /* current_directory is
587 a relative pathname ("can't happen"--leave it alone). */
591 memmove (q
- 1, p
+ 3, strlen (p
+ 3) + 1);
596 /* We are dealing with leading repetitions of "/..", for
597 example "/../..", which is the Mach super-root. */
607 forget_cached_source_info ();
610 pwd_command ((char *) 0, 1);
613 /* Show the current value of the 'script-extension' option. */
616 show_script_ext_mode (struct ui_file
*file
, int from_tty
,
617 struct cmd_list_element
*c
, const char *value
)
620 _("Script filename extension recognition is \"%s\".\n"),
624 /* Try to open SCRIPT_FILE.
625 If successful, the full path name is stored in *FULL_PATHP,
626 and the stream is returned.
627 If not successful, return NULL; errno is set for the last file
630 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
631 search for it in the source search path. */
633 std::optional
<open_script
>
634 find_and_open_script (const char *script_file
, int search_path
)
637 openp_flags search_flags
= OPF_TRY_CWD_FIRST
| OPF_RETURN_REALPATH
;
638 std::optional
<open_script
> opened
;
640 gdb::unique_xmalloc_ptr
<char> file (tilde_expand (script_file
));
643 search_flags
|= OPF_SEARCH_IN_PATH
;
645 /* Search for and open 'file' on the search path used for source
646 files. Put the full location in *FULL_PATHP. */
647 gdb::unique_xmalloc_ptr
<char> full_path
;
648 fd
= openp (source_path
.c_str (), search_flags
,
649 file
.get (), O_RDONLY
, &full_path
);
654 FILE *result
= fdopen (fd
, FOPEN_RT
);
657 int save_errno
= errno
;
663 opened
.emplace (gdb_file_up (result
), std::move (full_path
));
668 /* Load script FILE, which has already been opened as STREAM.
669 FILE_TO_OPEN is the form of FILE to use if one needs to open the file.
670 This is provided as FILE may have been found via the source search path.
671 An important thing to note here is that FILE may be a symlink to a file
672 with a different or non-existing suffix, and thus one cannot infer the
673 extension language from FILE_TO_OPEN. */
676 source_script_from_stream (FILE *stream
, const char *file
,
677 const char *file_to_open
)
679 if (script_ext_mode
!= script_ext_off
)
681 const struct extension_language_defn
*extlang
682 = get_ext_lang_of_file (file
);
686 if (ext_lang_present_p (extlang
))
688 script_sourcer_func
*sourcer
689 = ext_lang_script_sourcer (extlang
);
691 gdb_assert (sourcer
!= NULL
);
692 sourcer (extlang
, stream
, file_to_open
);
695 else if (script_ext_mode
== script_ext_soft
)
697 /* Assume the file is a gdb script.
698 This is handled below. */
701 throw_ext_lang_unsupported (extlang
);
705 script_from_file (stream
, file
);
708 /* Worker to perform the "source" command.
710 If SEARCH_PATH is non-zero, and the file isn't found in cwd,
711 search for it in the source search path. */
714 source_script_with_search (const char *file
, int from_tty
, int search_path
)
717 if (file
== NULL
|| *file
== 0)
718 error (_("source command requires file name of file to source."));
720 std::optional
<open_script
> opened
= find_and_open_script (file
, search_path
);
723 /* The script wasn't found, or was otherwise inaccessible.
724 If the source command was invoked interactively, throw an
725 error. Otherwise (e.g. if it was invoked by a script),
726 just emit a warning, rather than cause an error. */
728 perror_with_name (file
);
731 perror_warning_with_name (file
);
736 /* The python support reopens the file, so we need to pass full_path here
737 in case the file was found on the search path. It's useful to do this
738 anyway so that error messages show the actual file used. But only do
739 this if we (may have) used search_path, as printing the full path in
740 errors for the non-search case can be more noise than signal. */
741 const char *file_to_open
;
742 std::string tilde_expanded_file
;
744 file_to_open
= opened
->full_path
.get ();
747 tilde_expanded_file
= gdb_tilde_expand (file
);
748 file_to_open
= tilde_expanded_file
.c_str ();
750 source_script_from_stream (opened
->stream
.get (), file
, file_to_open
);
753 /* Wrapper around source_script_with_search to export it to main.c
754 for use in loading .gdbinit scripts. */
757 source_script (const char *file
, int from_tty
)
759 source_script_with_search (file
, from_tty
, 0);
763 source_command (const char *args
, int from_tty
)
765 const char *file
= args
;
768 scoped_restore save_source_verbose
= make_scoped_restore (&source_verbose
);
770 /* -v causes the source command to run in verbose mode.
771 -s causes the file to be searched in the source search path,
772 even if the file name contains a '/'.
773 We still have to be able to handle filenames with spaces in a
774 backward compatible way, so buildargv is not appropriate. */
778 while (args
[0] != '\0')
780 /* Make sure leading white space does not break the
782 args
= skip_spaces (args
);
787 if (args
[1] == 'v' && isspace (args
[2]))
791 /* Skip passed -v. */
794 else if (args
[1] == 's' && isspace (args
[2]))
798 /* Skip passed -s. */
805 file
= skip_spaces (args
);
808 source_script_with_search (file
, from_tty
, search_path
);
813 echo_command (const char *text
, int from_tty
)
815 const char *p
= text
;
819 while ((c
= *p
++) != '\0')
823 /* \ at end of argument is used after spaces
824 so they won't be lost. */
828 c
= parse_escape (get_current_arch (), &p
);
830 gdb_printf ("%c", c
);
833 gdb_printf ("%c", c
);
836 gdb_stdout
->emit_style_escape (ui_file_style ());
838 /* Force this output to appear now. */
839 gdb_flush (gdb_stdout
);
842 /* Sets the last launched shell command convenience variables based on
846 exit_status_set_internal_vars (int exit_status
)
848 struct internalvar
*var_code
= lookup_internalvar ("_shell_exitcode");
849 struct internalvar
*var_signal
= lookup_internalvar ("_shell_exitsignal");
851 clear_internalvar (var_code
);
852 clear_internalvar (var_signal
);
854 /* Keep the logic here in sync with shell_internal_fn. */
856 if (WIFEXITED (exit_status
))
857 set_internalvar_integer (var_code
, WEXITSTATUS (exit_status
));
859 else if (WIFSIGNALED (exit_status
) && WTERMSIG (exit_status
) == -1)
861 /* The -1 condition can happen on MinGW, if we don't recognize
862 the fatal exception code encoded in the exit status; see
863 gdbsupport/gdb_wait.c. We don't want to lose information in
864 the exit status in that case. Record it as a normal exit
865 with the full exit status, including the higher 0xC0000000
867 set_internalvar_integer (var_code
, exit_status
);
870 else if (WIFSIGNALED (exit_status
))
871 set_internalvar_integer (var_signal
, WTERMSIG (exit_status
));
873 warning (_("unexpected shell command exit status %d"), exit_status
);
876 /* Run ARG under the shell, and return the exit status. If ARG is
877 NULL, run an interactive shell. */
880 run_under_shell (const char *arg
, int from_tty
)
882 #if defined(CANT_FORK) || \
883 (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK))
884 /* If ARG is NULL, they want an inferior shell, but `system' just
885 reports if the shell is available when passed a NULL arg. */
886 int rc
= system (arg
? arg
: "");
889 arg
= "inferior shell";
892 gdb_printf (gdb_stderr
, "Cannot execute %s: %s\n", arg
,
893 safe_strerror (errno
));
895 gdb_printf (gdb_stderr
, "%s exited with status %d\n", arg
, rc
);
897 /* Make sure to return to the directory GDB thinks it is, in case
898 the shell command we just ran changed it. */
899 chdir (current_directory
);
902 #else /* Can fork. */
905 if ((pid
= vfork ()) == 0)
907 const char *p
, *user_shell
= get_shell ();
911 /* Get the name of the shell for arg0. */
912 p
= lbasename (user_shell
);
915 execl (user_shell
, p
, (char *) 0);
917 execl (user_shell
, p
, "-c", arg
, (char *) 0);
919 gdb_printf (gdb_stderr
, "Cannot execute %s: %s\n", user_shell
,
920 safe_strerror (errno
));
926 int ret
= gdb::waitpid (pid
, &status
, 0);
928 perror_with_name ("Cannot get status of shell command");
931 error (_("Fork failed"));
933 #endif /* Can fork. */
936 /* Escape out to the shell to run ARG. If ARG is NULL, launch and
937 interactive shell. Sets $_shell_exitcode and $_shell_exitsignal
938 convenience variables based on the exits status. */
941 shell_escape (const char *arg
, int from_tty
)
943 int status
= run_under_shell (arg
, from_tty
);
944 exit_status_set_internal_vars (status
);
947 /* Implementation of the "shell" command. */
950 shell_command (const char *arg
, int from_tty
)
952 shell_escape (arg
, from_tty
);
955 /* Completion for the shell command. Currently, this just uses filename
956 completion, but we could, potentially, complete command names from $PATH
957 for the first word, which would make this even more shell like. */
960 shell_command_completer (struct cmd_list_element
*ignore
,
961 completion_tracker
&tracker
,
962 const char *text
, const char * /* word */)
964 tracker
.set_use_custom_word_point (true);
966 = advance_to_filename_maybe_quoted_complete_word_point (tracker
, text
);
967 filename_maybe_quoted_completer (ignore
, tracker
, text
, word
);
971 edit_command (const char *arg
, int from_tty
)
973 struct symtab_and_line sal
;
978 /* Pull in the current default source line if necessary. */
981 set_default_source_symtab_and_line ();
982 sal
= get_current_source_symtab_and_line (current_program_space
);
985 /* Bare "edit" edits file with present line. */
990 error (_("No default source file yet."));
991 if (get_first_line_listed () != 0)
992 sal
.line
= get_first_line_listed () + get_lines_to_list () / 2;
998 /* Now should only be one argument -- decode it in SAL. */
1000 location_spec_up locspec
= string_to_location_spec (&arg1
,
1004 error (_("Junk at end of line specification."));
1006 std::vector
<symtab_and_line
> sals
= decode_line_1 (locspec
.get (),
1007 DECODE_LINE_LIST_MODE
,
1016 if (sals
.size () > 1)
1018 ambiguous_line_spec (sals
,
1019 _("Specified line is ambiguous:\n"));
1025 /* If line was specified by address, first print exactly which
1026 line, and which file. In this case, sal.symtab == 0 means
1027 address is outside of all known source files, not that user
1028 failed to give a filename. */
1031 struct gdbarch
*gdbarch
;
1033 if (sal
.symtab
== 0)
1034 error (_("No source file for address %s."),
1035 paddress (get_current_arch (), sal
.pc
));
1037 gdbarch
= sal
.symtab
->compunit ()->objfile ()->arch ();
1038 sym
= find_pc_function (sal
.pc
);
1040 gdb_printf ("%ps is in %ps (%ps:%ps).\n",
1041 styled_string (address_style
.style (),
1042 paddress (gdbarch
, sal
.pc
)),
1043 styled_string (function_name_style
.style (),
1044 sym
->print_name ()),
1045 styled_string (file_name_style
.style (),
1046 symtab_to_filename_for_display (sal
.symtab
)),
1047 styled_string (line_number_style
.style (),
1048 pulongest (sal
.line
)));
1050 gdb_printf ("%ps is at %ps:%ps.\n",
1051 styled_string (address_style
.style (),
1052 paddress (gdbarch
, sal
.pc
)),
1053 styled_string (file_name_style
.style (),
1054 symtab_to_filename_for_display (sal
.symtab
)),
1055 styled_string (line_number_style
.style (),
1056 pulongest (sal
.line
)));
1059 /* If what was given does not imply a symtab, it must be an
1060 undebuggable symbol which means no source code. */
1062 if (sal
.symtab
== 0)
1063 error (_("No line number known for %s."), arg
);
1066 if ((editor
= getenv ("EDITOR")) == NULL
)
1069 fn
= symtab_to_fullname (sal
.symtab
);
1071 /* Quote the file name, in case it has whitespace or other special
1073 gdb::unique_xmalloc_ptr
<char> p
1074 = xstrprintf ("%s +%d \"%s\"", editor
, sal
.line
, fn
);
1075 shell_escape (p
.get (), from_tty
);
1078 /* The options for the "pipe" command. */
1080 struct pipe_cmd_opts
1083 std::string delimiter
;
1086 static const gdb::option::option_def pipe_cmd_option_defs
[] = {
1088 gdb::option::string_option_def
<pipe_cmd_opts
> {
1090 [] (pipe_cmd_opts
*opts
) { return &opts
->delimiter
; },
1092 N_("Indicates to use the specified delimiter string to separate\n\
1093 COMMAND from SHELL_COMMAND, in alternative to |. This is useful in\n\
1094 case COMMAND contains a | character."),
1099 /* Create an option_def_group for the "pipe" command's options, with
1102 static inline gdb::option::option_def_group
1103 make_pipe_cmd_options_def_group (pipe_cmd_opts
*opts
)
1105 return {{pipe_cmd_option_defs
}, opts
};
1108 /* Implementation of the "pipe" command. */
1111 pipe_command (const char *arg
, int from_tty
)
1115 auto grp
= make_pipe_cmd_options_def_group (&opts
);
1116 gdb::option::process_options
1117 (&arg
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND
, grp
);
1119 const char *delim
= "|";
1120 if (!opts
.delimiter
.empty ())
1121 delim
= opts
.delimiter
.c_str ();
1123 const char *command
= arg
;
1124 if (command
== nullptr)
1125 error (_("Missing COMMAND"));
1127 arg
= strstr (arg
, delim
);
1130 error (_("Missing delimiter before SHELL_COMMAND"));
1132 std::string
gdb_cmd (command
, arg
- command
);
1134 arg
+= strlen (delim
); /* Skip the delimiter. */
1136 if (gdb_cmd
.empty ())
1137 gdb_cmd
= repeat_previous ();
1139 const char *shell_command
= skip_spaces (arg
);
1140 if (*shell_command
== '\0')
1141 error (_("Missing SHELL_COMMAND"));
1143 FILE *to_shell_command
= popen (shell_command
, "w");
1145 if (to_shell_command
== nullptr)
1146 error (_("Error launching \"%s\""), shell_command
);
1150 SCOPE_EXIT
{ exit_status
= pclose (to_shell_command
); };
1152 stdio_file
pipe_file (to_shell_command
);
1154 execute_command_to_ui_file (&pipe_file
, gdb_cmd
.c_str (), from_tty
);
1157 if (exit_status
< 0)
1158 error (_("shell command \"%s\" failed: %s"), shell_command
,
1159 safe_strerror (errno
));
1160 exit_status_set_internal_vars (exit_status
);
1163 /* Completer for the pipe command. */
1166 pipe_command_completer (struct cmd_list_element
*ignore
,
1167 completion_tracker
&tracker
,
1168 const char *text
, const char *word_ignored
)
1172 const char *org_text
= text
;
1173 auto grp
= make_pipe_cmd_options_def_group (&opts
);
1174 if (gdb::option::complete_options
1175 (tracker
, &text
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND
, grp
))
1178 const char *delimiter
= "|";
1179 if (!opts
.delimiter
.empty ())
1180 delimiter
= opts
.delimiter
.c_str ();
1182 /* Check if we're past option values already. */
1183 if (text
> org_text
&& !isspace (text
[-1]))
1186 const char *delim
= strstr (text
, delimiter
);
1188 /* If we're still not past the delimiter, complete the gdb
1190 if (delim
== nullptr || delim
== text
)
1192 complete_nested_command_line (tracker
, text
);
1196 /* We're past the delimiter now, or at least, DELIM points to the
1197 delimiter string. Update TEXT to point to the start of whatever
1198 appears after the delimiter. */
1199 text
= skip_spaces (delim
+ strlen (delimiter
));
1201 /* We really are past the delimiter now, so offer completions. This is
1202 like GDB's "shell" command, currently we only offer filename
1203 completion, but in the future this could be improved by offering
1204 completion of command names from $PATH.
1206 What we don't do here is offer completions for the empty string. It
1207 is assumed that the first word after the delimiter is going to be a
1208 command name from $PATH, not a filename, so if the user has typed
1209 nothing (yet) and tries to complete, there's no point offering a list
1210 of files from the current directory.
1212 Once the user has started to type something though, then we do start
1213 offering filename completions. */
1217 tracker
.set_use_custom_word_point (true);
1218 tracker
.advance_custom_word_point_by (text
- org_text
);
1220 = advance_to_filename_maybe_quoted_complete_word_point (tracker
, text
);
1221 filename_maybe_quoted_completer (ignore
, tracker
, text
, word
);
1224 /* Helper for the list_command function. Prints the lines around (and
1225 including) line stored in CURSAL. ARG contains the arguments used in
1226 the command invocation, and is used to determine a special case when
1227 printing backwards. */
1229 list_around_line (const char *arg
, symtab_and_line cursal
)
1233 first
= std::max (cursal
.line
- get_lines_to_list () / 2, 1);
1235 /* A small special case --- if listing backwards, and we
1236 should list only one line, list the preceding line,
1237 instead of the exact line we've just shown after e.g.,
1238 stopping for a breakpoint. */
1239 if (arg
!= NULL
&& arg
[0] == '-'
1240 && get_lines_to_list () == 1 && first
> 1)
1243 print_source_lines (cursal
.symtab
, source_lines_range (first
), 0);
1247 list_command (const char *arg
, int from_tty
)
1254 int linenum_beg
= 0;
1257 /* Pull in the current default source line if necessary. */
1258 if (arg
== NULL
|| ((arg
[0] == '+' || arg
[0] == '-' || arg
[0] == '.') && arg
[1] == '\0'))
1260 /* If this is the first "list" since we've set the current
1261 source line, center the listing around that line. */
1262 if (get_first_line_listed () == 0 && (arg
== nullptr || arg
[0] != '.'))
1264 set_default_source_symtab_and_line ();
1266 (arg
, get_current_source_symtab_and_line (current_program_space
));
1269 /* "l" and "l +" lists the next few lines, unless we're listing past
1270 the end of the file. */
1271 else if (arg
== nullptr || arg
[0] == '+')
1273 set_default_source_symtab_and_line ();
1274 const symtab_and_line cursal
1275 = get_current_source_symtab_and_line (current_program_space
);
1276 if (last_symtab_line (cursal
.symtab
) >= cursal
.line
)
1277 print_source_lines (cursal
.symtab
,
1278 source_lines_range (cursal
.line
), 0);
1280 error (_("End of the file was already reached, use \"list .\" to"
1281 " list the current location again"));
1284 /* "l -" lists previous ten lines, the ones before the ten just
1286 else if (arg
[0] == '-')
1288 set_default_source_symtab_and_line ();
1289 const symtab_and_line cursal
1290 = get_current_source_symtab_and_line (current_program_space
);
1292 if (get_first_line_listed () == 1)
1293 error (_("Already at the start of %s."),
1294 symtab_to_filename_for_display (cursal
.symtab
));
1296 source_lines_range
range (get_first_line_listed (),
1297 source_lines_range::BACKWARD
);
1298 print_source_lines (cursal
.symtab
, range
, 0);
1301 /* "list ." lists the default location again. */
1302 else if (arg
[0] == '.')
1304 symtab_and_line cursal
;
1305 if (target_has_stack ())
1307 /* Find the current line by getting the PC of the currently
1308 selected frame, and finding the line associated to it. */
1309 frame_info_ptr frame
= get_selected_frame (nullptr);
1310 CORE_ADDR curr_pc
= get_frame_pc (frame
);
1311 cursal
= find_pc_line (curr_pc
, 0);
1313 if (cursal
.symtab
== nullptr)
1315 (_("Insufficient debug info for showing source lines at "
1316 "current PC (%s)."), paddress (get_frame_arch (frame
),
1321 /* The inferior is not running, so reset the current source
1322 location to the default (usually the main function). */
1323 clear_current_source_symtab_and_line (current_program_space
);
1326 set_default_source_symtab_and_line ();
1328 catch (const gdb_exception
&e
)
1330 error (_("Insufficient debug info for showing source "
1331 "lines at default location"));
1334 = get_current_source_symtab_and_line (current_program_space
);
1336 gdb_assert (cursal
.symtab
!= nullptr);
1339 list_around_line (arg
, cursal
);
1341 /* Set the repeat args so just pressing "enter" after using "list ."
1342 will print the following lines instead of the same lines again. */
1344 set_repeat_arguments ("");
1350 /* Now if there is only one argument, decode it in SAL
1352 If there are two arguments, decode them in SAL and SAL_END
1353 and clear NO_END; however, if one of the arguments is blank,
1354 set DUMMY_BEG or DUMMY_END to record that fact. */
1356 if (!have_full_symbols (current_program_space
)
1357 && !have_partial_symbols (current_program_space
))
1358 error (_("No symbol table is loaded. Use the \"file\" command."));
1360 std::vector
<symtab_and_line
> sals
;
1361 symtab_and_line sal
, sal_end
;
1368 location_spec_up locspec
1369 = string_to_location_spec (&arg1
, current_language
);
1371 /* We know that the ARG string is not empty, yet the attempt to
1372 parse a location spec from the string consumed no characters.
1373 This most likely means that the first thing in ARG looks like
1374 a location spec condition, and so the string_to_location_spec
1375 call stopped parsing. */
1377 error (_("Junk at end of line specification."));
1379 sals
= decode_line_1 (locspec
.get (), DECODE_LINE_LIST_MODE
,
1391 /* Record whether the BEG arg is all digits. */
1393 for (p
= arg
; p
!= arg1
&& *p
>= '0' && *p
<= '9'; p
++);
1394 linenum_beg
= (p
== arg1
);
1396 /* Save the range of the first argument, in case we need to let the
1397 user know it was ambiguous. */
1398 const char *beg
= arg
;
1399 size_t beg_len
= arg1
- beg
;
1401 while (*arg1
== ' ' || *arg1
== '\t')
1406 if (sals
.size () > 1)
1408 ambiguous_line_spec (sals
,
1409 _("Specified first line '%.*s' is ambiguous:\n"),
1410 (int) beg_len
, beg
);
1414 while (*arg1
== ' ' || *arg1
== '\t')
1420 /* Save the last argument, in case we need to let the user
1421 know it was ambiguous. */
1422 const char *end_arg
= arg1
;
1424 location_spec_up locspec
1425 = string_to_location_spec (&arg1
, current_language
);
1428 error (_("Junk at end of line specification."));
1430 std::vector
<symtab_and_line
> sals_end
1432 ? decode_line_1 (locspec
.get (), DECODE_LINE_LIST_MODE
,
1434 : decode_line_1 (locspec
.get (), DECODE_LINE_LIST_MODE
,
1435 NULL
, sal
.symtab
, sal
.line
));
1437 filter_sals (sals_end
);
1438 if (sals_end
.empty ())
1440 if (sals_end
.size () > 1)
1442 ambiguous_line_spec (sals_end
,
1443 _("Specified last line '%s' is ambiguous:\n"),
1447 sal_end
= sals_end
[0];
1452 error (_("Junk at end of line specification."));
1454 if (!no_end
&& !dummy_beg
&& !dummy_end
1455 && sal
.symtab
!= sal_end
.symtab
)
1456 error (_("Specified first and last lines are in different files."));
1457 if (dummy_beg
&& dummy_end
)
1458 error (_("Two empty args do not say what lines to list."));
1460 /* If line was specified by address,
1461 first print exactly which line, and which file.
1463 In this case, sal.symtab == 0 means address is outside of all
1464 known source files, not that user failed to give a filename. */
1467 struct gdbarch
*gdbarch
;
1469 if (sal
.symtab
== 0)
1470 error (_("No source file for address %s."),
1471 paddress (get_current_arch (), sal
.pc
));
1473 gdbarch
= sal
.symtab
->compunit ()->objfile ()->arch ();
1474 sym
= find_pc_function (sal
.pc
);
1476 gdb_printf ("%s is in %s (%s:%d).\n",
1477 paddress (gdbarch
, sal
.pc
),
1479 symtab_to_filename_for_display (sal
.symtab
), sal
.line
);
1481 gdb_printf ("%s is at %s:%d.\n",
1482 paddress (gdbarch
, sal
.pc
),
1483 symtab_to_filename_for_display (sal
.symtab
), sal
.line
);
1486 /* If line was not specified by just a line number, and it does not
1487 imply a symtab, it must be an undebuggable symbol which means no
1490 if (!linenum_beg
&& sal
.symtab
== 0)
1491 error (_("No line number known for %s."), arg
);
1493 /* If this command is repeated with RET,
1494 turn it into the no-arg variant. */
1497 set_repeat_arguments ("");
1499 if (dummy_beg
&& sal_end
.symtab
== 0)
1500 error (_("No default source file yet. Do \"help list\"."));
1503 source_lines_range
range (sal_end
.line
+ 1,
1504 source_lines_range::BACKWARD
);
1505 print_source_lines (sal_end
.symtab
, range
, 0);
1507 else if (sal
.symtab
== 0)
1508 error (_("No default source file yet. Do \"help list\"."));
1511 for (int i
= 0; i
< sals
.size (); i
++)
1514 int first_line
= sal
.line
- get_lines_to_list () / 2;
1517 if (sals
.size () > 1)
1518 print_sal_location (sal
);
1519 print_source_lines (sal
.symtab
, source_lines_range (first_line
), 0);
1523 print_source_lines (sal
.symtab
, source_lines_range (sal
.line
), 0);
1525 print_source_lines (sal
.symtab
,
1526 source_lines_range (sal
.line
, (sal_end
.line
+ 1)),
1530 /* Subroutine of disassemble_command to simplify it.
1531 Perform the disassembly.
1532 NAME is the name of the function if known, or NULL.
1533 [LOW,HIGH) are the range of addresses to disassemble.
1534 BLOCK is the block to disassemble; it needs to be provided
1535 when non-contiguous blocks are disassembled; otherwise
1537 MIXED is non-zero to print source with the assembler. */
1540 print_disassembly (struct gdbarch
*gdbarch
, const char *name
,
1541 CORE_ADDR low
, CORE_ADDR high
,
1542 const struct block
*block
,
1543 gdb_disassembly_flags flags
)
1546 if (tui_is_window_visible (DISASSEM_WIN
))
1547 tui_show_assembly (gdbarch
, low
);
1551 gdb_printf (_("Dump of assembler code "));
1553 gdb_printf (_("for function %ps:\n"),
1554 styled_string (function_name_style
.style (), name
));
1555 if (block
== nullptr || block
->is_contiguous ())
1558 gdb_printf (_("from %ps to %ps:\n"),
1559 styled_string (address_style
.style (),
1560 paddress (gdbarch
, low
)),
1561 styled_string (address_style
.style (),
1562 paddress (gdbarch
, high
)));
1564 /* Dump the specified range. */
1565 gdb_disassembly (gdbarch
, current_uiout
, flags
, -1, low
, high
);
1569 for (const blockrange
&range
: block
->ranges ())
1571 CORE_ADDR range_low
= range
.start ();
1572 CORE_ADDR range_high
= range
.end ();
1574 gdb_printf (_("Address range %ps to %ps:\n"),
1575 styled_string (address_style
.style (),
1576 paddress (gdbarch
, range_low
)),
1577 styled_string (address_style
.style (),
1578 paddress (gdbarch
, range_high
)));
1579 gdb_disassembly (gdbarch
, current_uiout
, flags
, -1,
1580 range_low
, range_high
);
1583 gdb_printf (_("End of assembler dump.\n"));
1587 /* Subroutine of disassemble_command to simplify it.
1588 Print a disassembly of the current function according to FLAGS. */
1591 disassemble_current_function (gdb_disassembly_flags flags
)
1593 frame_info_ptr frame
= get_selected_frame (_("No frame selected."));
1594 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
1595 CORE_ADDR pc
= get_frame_address_in_block (frame
);
1597 const general_symbol_info
*gsi
;
1598 const struct block
*block
;
1599 CORE_ADDR low
, high
;
1600 if (find_pc_partial_function_sym (pc
, &gsi
, &low
, &high
, &block
) == 0)
1601 error (_("No function contains program counter for selected frame."));
1603 gdb_assert (gsi
!= nullptr);
1604 const char *name
= asm_demangle
? gsi
->print_name () : gsi
->linkage_name ();
1607 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1610 /* FIXME: cagney/2004-02-07: This should be an observer. */
1611 low
= tui_get_low_disassembly_address (gdbarch
, low
, pc
);
1613 low
+= gdbarch_deprecated_function_start_offset (gdbarch
);
1615 print_disassembly (gdbarch
, name
, low
, high
, block
, flags
);
1618 /* Dump a specified section of assembly code.
1622 - dump the assembly code for the function of the current pc
1623 disassemble [/mrs] addr
1624 - dump the assembly code for the function at ADDR
1625 disassemble [/mrs] low,high
1626 disassemble [/mrs] low,+length
1627 - dump the assembly code in the range [LOW,HIGH), or [LOW,LOW+length)
1629 A /m modifier will include source code with the assembly in a
1630 "source centric" view. This view lists only the file of the first insn,
1631 even if other source files are involved (e.g., inlined functions), and
1632 the output is in source order, even with optimized code. This view is
1633 considered deprecated as it hasn't been useful in practice.
1635 A /r modifier will include raw instructions in hex with the assembly.
1637 A /b modifier is similar to /r except the instruction bytes are printed
1638 as separate bytes with no grouping, or endian switching.
1640 A /s modifier will include source code with the assembly, like /m, with
1641 two important differences:
1642 1) The output is still in pc address order.
1643 2) File names and contents for all relevant source files are displayed. */
1646 disassemble_command (const char *arg
, int from_tty
)
1648 struct gdbarch
*gdbarch
= get_current_arch ();
1649 CORE_ADDR low
, high
;
1650 const general_symbol_info
*symbol
= nullptr;
1653 gdb_disassembly_flags flags
;
1655 const struct block
*block
= nullptr;
1666 error (_("Missing modifier."));
1668 while (*p
&& ! isspace (*p
))
1673 flags
|= DISASSEMBLY_SOURCE_DEPRECATED
;
1676 flags
|= DISASSEMBLY_RAW_INSN
;
1679 flags
|= DISASSEMBLY_RAW_BYTES
;
1682 flags
|= DISASSEMBLY_SOURCE
;
1685 error (_("Invalid disassembly modifier."));
1689 p
= skip_spaces (p
);
1692 if ((flags
& (DISASSEMBLY_SOURCE_DEPRECATED
| DISASSEMBLY_SOURCE
))
1693 == (DISASSEMBLY_SOURCE_DEPRECATED
| DISASSEMBLY_SOURCE
))
1694 error (_("Cannot specify both /m and /s."));
1696 if ((flags
& (DISASSEMBLY_RAW_INSN
| DISASSEMBLY_RAW_BYTES
))
1697 == (DISASSEMBLY_RAW_INSN
| DISASSEMBLY_RAW_BYTES
))
1698 error (_("Cannot specify both /r and /b."));
1702 flags
|= DISASSEMBLY_OMIT_FNAME
;
1703 disassemble_current_function (flags
);
1707 pc
= value_as_address (parse_to_comma_and_eval (&p
));
1713 if (!find_pc_partial_function_sym (pc
, &symbol
, &low
, &high
, &block
))
1714 error (_("No function contains specified address."));
1717 name
= symbol
->print_name ();
1719 name
= symbol
->linkage_name ();
1722 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1725 /* FIXME: cagney/2004-02-07: This should be an observer. */
1726 low
= tui_get_low_disassembly_address (gdbarch
, low
, pc
);
1728 low
+= gdbarch_deprecated_function_start_offset (gdbarch
);
1729 flags
|= DISASSEMBLY_OMIT_FNAME
;
1733 /* Two arguments. */
1736 p
= skip_spaces (p
);
1742 high
= parse_and_eval_address (p
);
1747 print_disassembly (gdbarch
, name
, low
, high
, block
, flags
);
1750 /* Command completion for the disassemble command. */
1753 disassemble_command_completer (struct cmd_list_element
*ignore
,
1754 completion_tracker
&tracker
,
1755 const char *text
, const char * /* word */)
1757 if (skip_over_slash_fmt (tracker
, &text
))
1760 const char *word
= advance_to_expression_complete_word_point (tracker
, text
);
1761 expression_completer (ignore
, tracker
, text
, word
);
1765 make_command (const char *arg
, int from_tty
)
1768 shell_escape ("make", from_tty
);
1771 std::string cmd
= std::string ("make ") + arg
;
1773 shell_escape (cmd
.c_str (), from_tty
);
1778 show_user (const char *args
, int from_tty
)
1780 struct cmd_list_element
*c
;
1784 const char *comname
= args
;
1786 c
= lookup_cmd (&comname
, cmdlist
, "", NULL
, 0, 1);
1787 if (!cli_user_command_p (c
))
1788 error (_("Not a user command."));
1789 show_user_1 (c
, "", args
, gdb_stdout
);
1793 for (c
= cmdlist
; c
; c
= c
->next
)
1795 if (cli_user_command_p (c
) || c
->is_prefix ())
1796 show_user_1 (c
, "", c
->name
, gdb_stdout
);
1801 /* Return true if COMMAND or any of its sub-commands is a user defined command.
1802 This is a helper function for show_user_completer. */
1805 has_user_subcmd (struct cmd_list_element
*command
)
1807 if (cli_user_command_p (command
))
1810 /* Alias command can yield false positive. Ignore them as the targeted
1811 command should be reachable anyway. */
1812 if (command
->is_alias ())
1815 if (command
->is_prefix ())
1816 for (struct cmd_list_element
*subcommand
= *command
->subcommands
;
1817 subcommand
!= nullptr;
1818 subcommand
= subcommand
->next
)
1819 if (has_user_subcmd (subcommand
))
1825 /* Implement completer for the 'show user' command. */
1828 show_user_completer (cmd_list_element
*,
1829 completion_tracker
&tracker
, const char *text
,
1832 struct cmd_list_element
*cmd_group
= cmdlist
;
1834 /* TEXT can contain a chain of commands and subcommands. Follow the
1835 commands chain until we reach the point where the user wants a
1839 const char *curr_cmd
= text
;
1840 const char *after
= skip_to_space (text
);
1841 const size_t curr_cmd_len
= after
- text
;
1842 text
= skip_spaces (after
);
1844 for (struct cmd_list_element
*c
= cmd_group
; c
!= nullptr; c
= c
->next
)
1846 if (strlen (c
->name
) == curr_cmd_len
1847 && strncmp (c
->name
, curr_cmd
, curr_cmd_len
) == 0)
1849 if (c
->subcommands
== nullptr)
1850 /* We arrived after a command with no child, so nothing more
1854 cmd_group
= *c
->subcommands
;
1860 const int wordlen
= strlen (word
);
1861 for (struct cmd_list_element
*c
= cmd_group
; c
!= nullptr; c
= c
->next
)
1862 if (has_user_subcmd (c
))
1864 if (strncmp (c
->name
, word
, wordlen
) == 0)
1865 tracker
.add_completion
1866 (gdb::unique_xmalloc_ptr
<char> (xstrdup (c
->name
)));
1870 /* Search through names of commands and documentations for a certain
1871 regular expression. */
1874 apropos_command (const char *arg
, int from_tty
)
1876 bool verbose
= arg
&& check_for_argument (&arg
, "-v", 2);
1878 if (arg
== NULL
|| *arg
== '\0')
1879 error (_("REGEXP string is empty"));
1881 compiled_regex
pattern (arg
, REG_ICASE
,
1882 _("Error in regular expression"));
1884 apropos_cmd (gdb_stdout
, cmdlist
, verbose
, pattern
);
1887 /* The options for the "alias" command. */
1892 bool abbrev_flag
= false;
1895 static const gdb::option::option_def alias_option_defs
[] = {
1897 gdb::option::flag_option_def
<alias_opts
> {
1899 [] (alias_opts
*opts
) { return &opts
->abbrev_flag
; },
1900 N_("Specify that ALIAS is an abbreviation of COMMAND.\n\
1901 Abbreviations are not used in command completion."),
1906 /* Create an option_def_group for the "alias" options, with
1907 A_OPTS as context. */
1909 static gdb::option::option_def_group
1910 make_alias_options_def_group (alias_opts
*a_opts
)
1912 return {{alias_option_defs
}, a_opts
};
1915 /* Completer for the "alias_command". */
1918 alias_command_completer (struct cmd_list_element
*ignore
,
1919 completion_tracker
&tracker
,
1920 const char *text
, const char *word
)
1922 const auto grp
= make_alias_options_def_group (nullptr);
1924 tracker
.set_use_custom_word_point (true);
1926 if (gdb::option::complete_options
1927 (tracker
, &text
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
, grp
))
1930 const char *delim
= strchr (text
, '=');
1932 /* If we're past the "=" delimiter, complete the
1933 "alias ALIAS = COMMAND [DEFAULT-ARGS...]" as if the user is
1934 typing COMMAND DEFAULT-ARGS... */
1937 && isspace (delim
[-1])
1938 && (isspace (delim
[1]) || delim
[1] == '\0'))
1940 std::string new_text
= std::string (delim
+ 1);
1942 tracker
.advance_custom_word_point_by (delim
+ 1 - text
);
1943 complete_nested_command_line (tracker
, new_text
.c_str ());
1947 /* We're not yet past the "=" delimiter. Complete a command, as
1948 the user might type an alias following a prefix command. */
1949 complete_nested_command_line (tracker
, text
);
1952 /* Subroutine of alias_command to simplify it.
1953 Return the first N elements of ARGV flattened back to a string
1954 with a space separating each element.
1955 ARGV may not be NULL.
1956 This does not take care of quoting elements in case they contain spaces
1960 argv_to_string (char **argv
, int n
)
1965 gdb_assert (argv
!= NULL
);
1966 gdb_assert (n
>= 0 && n
<= countargv (argv
));
1968 for (i
= 0; i
< n
; ++i
)
1978 /* Subroutine of alias_command to simplify it.
1979 Verifies that COMMAND can have an alias:
1981 COMMAND must not have default args.
1982 This last condition is to avoid the following:
1983 alias aaa = backtrace -full
1984 alias bbb = aaa -past-main
1985 as (at least currently), alias default args are not cumulative
1986 and the user would expect bbb to execute 'backtrace -full -past-main'
1987 while it will execute 'backtrace -past-main'. */
1989 static cmd_list_element
*
1990 validate_aliased_command (const char *command
)
1992 std::string default_args
;
1994 = lookup_cmd_1 (& command
, cmdlist
, NULL
, &default_args
, 1);
1996 if (c
== NULL
|| c
== (struct cmd_list_element
*) -1)
1997 error (_("Invalid command to alias to: %s"), command
);
1999 if (!default_args
.empty ())
2000 error (_("Cannot define an alias of an alias that has default args"));
2005 /* Called when "alias" was incorrectly used. */
2008 alias_usage_error (void)
2010 error (_("Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]"));
2013 /* Make an alias of an existing command. */
2016 alias_command (const char *args
, int from_tty
)
2020 auto grp
= make_alias_options_def_group (&a_opts
);
2021 gdb::option::process_options
2022 (&args
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
, grp
);
2024 int i
, alias_argc
, command_argc
;
2026 const char *alias
, *command
;
2028 if (args
== NULL
|| strchr (args
, '=') == NULL
)
2029 alias_usage_error ();
2031 equals
= strchr (args
, '=');
2032 std::string
args2 (args
, equals
- args
);
2034 gdb_argv
built_alias_argv (args2
.c_str ());
2036 const char *default_args
= equals
+ 1;
2037 struct cmd_list_element
*c_command_prefix
;
2039 lookup_cmd_for_default_args (&default_args
, &c_command_prefix
);
2040 std::string
command_argv_str (equals
+ 1,
2041 default_args
== nullptr
2042 ? strlen (equals
+ 1)
2043 : default_args
- equals
- 1);
2044 gdb_argv
command_argv (command_argv_str
.c_str ());
2046 char **alias_argv
= built_alias_argv
.get ();
2048 if (alias_argv
[0] == NULL
|| command_argv
[0] == NULL
2049 || *alias_argv
[0] == '\0' || *command_argv
[0] == '\0')
2050 alias_usage_error ();
2052 for (i
= 0; alias_argv
[i
] != NULL
; ++i
)
2054 if (! valid_user_defined_cmd_name_p (alias_argv
[i
]))
2057 error (_("Invalid command name: %s"), alias_argv
[i
]);
2059 error (_("Invalid command element name: %s"), alias_argv
[i
]);
2063 alias_argc
= countargv (alias_argv
);
2064 command_argc
= command_argv
.count ();
2066 /* COMMAND must exist, and cannot have default args.
2067 Reconstruct the command to remove any extraneous spaces,
2068 for better error messages. */
2069 std::string
command_string (argv_to_string (command_argv
.get (),
2071 command
= command_string
.c_str ();
2072 cmd_list_element
*target_cmd
= validate_aliased_command (command
);
2074 /* ALIAS must not exist. */
2075 std::string
alias_string (argv_to_string (alias_argv
, alias_argc
));
2076 alias
= alias_string
.c_str ();
2078 cmd_list_element
*alias_cmd
, *prefix_cmd
, *cmd
;
2080 if (lookup_cmd_composition (alias
, &alias_cmd
, &prefix_cmd
, &cmd
))
2082 const char *alias_name
= alias_argv
[alias_argc
-1];
2084 /* If we found an existing ALIAS_CMD, check that the prefix differ or
2087 if (alias_cmd
!= nullptr
2088 && alias_cmd
->prefix
== prefix_cmd
2089 && strcmp (alias_name
, alias_cmd
->name
) == 0)
2090 error (_("Alias already exists: %s"), alias
);
2092 /* Check ALIAS differs from the found CMD. */
2094 if (cmd
->prefix
== prefix_cmd
2095 && strcmp (alias_name
, cmd
->name
) == 0)
2096 error (_("Alias %s is the name of an existing command"), alias
);
2101 struct cmd_list_element
*alias_cmd
;
2103 /* If ALIAS is one word, it is an alias for the entire COMMAND.
2104 Example: alias spe = set print elements
2106 Otherwise ALIAS and COMMAND must have the same number of words,
2107 and every word except the last must identify the same prefix command;
2108 and the last word of ALIAS is made an alias of the last word of COMMAND.
2109 Example: alias set print elms = set pr elem
2110 Note that unambiguous abbreviations are allowed. */
2112 if (alias_argc
== 1)
2114 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
2115 alias_cmd
= add_com_alias (xstrdup (alias_argv
[0]), target_cmd
,
2116 class_alias
, a_opts
.abbrev_flag
);
2120 const char *alias_prefix
, *command_prefix
;
2121 struct cmd_list_element
*c_alias
, *c_command
;
2123 if (alias_argc
!= command_argc
)
2124 error (_("Mismatched command length between ALIAS and COMMAND."));
2126 /* Create copies of ALIAS and COMMAND without the last word,
2127 and use that to verify the leading elements give the same
2129 std::string
alias_prefix_string (argv_to_string (alias_argv
,
2131 std::string
command_prefix_string (argv_to_string (command_argv
.get (),
2133 alias_prefix
= alias_prefix_string
.c_str ();
2134 command_prefix
= command_prefix_string
.c_str ();
2136 c_command
= lookup_cmd_1 (& command_prefix
, cmdlist
, NULL
, NULL
, 1);
2137 /* We've already tried to look up COMMAND. */
2138 gdb_assert (c_command
!= NULL
2139 && c_command
!= (struct cmd_list_element
*) -1);
2140 gdb_assert (c_command
->is_prefix ());
2141 c_alias
= lookup_cmd_1 (& alias_prefix
, cmdlist
, NULL
, NULL
, 1);
2142 if (c_alias
!= c_command
)
2143 error (_("ALIAS and COMMAND prefixes do not match."));
2145 /* add_cmd requires *we* allocate space for name, hence the xstrdup. */
2146 alias_cmd
= add_alias_cmd (xstrdup (alias_argv
[alias_argc
- 1]),
2147 target_cmd
, class_alias
, a_opts
.abbrev_flag
,
2148 c_command
->subcommands
);
2151 gdb_assert (alias_cmd
!= nullptr);
2152 gdb_assert (alias_cmd
->default_args
.empty ());
2153 if (default_args
!= nullptr)
2155 default_args
= skip_spaces (default_args
);
2157 alias_cmd
->default_args
= default_args
;
2161 /* Print the file / line number / symbol name of the location
2162 specified by SAL. */
2165 print_sal_location (const symtab_and_line
&sal
)
2167 scoped_restore_current_program_space restore_pspace
;
2168 set_current_program_space (sal
.pspace
);
2170 const char *sym_name
= NULL
;
2171 if (sal
.symbol
!= NULL
)
2172 sym_name
= sal
.symbol
->print_name ();
2173 gdb_printf (_("file: \"%s\", line number: %ps, symbol: \"%s\"\n"),
2174 symtab_to_filename_for_display (sal
.symtab
),
2175 styled_string (line_number_style
.style (),
2176 pulongest (sal
.line
)),
2177 sym_name
!= NULL
? sym_name
: "???");
2180 /* Print a list of files and line numbers which a user may choose from
2181 in order to list a function which was specified ambiguously (as
2182 with `list classname::overloadedfuncname', for example). The SALS
2183 array provides the filenames and line numbers. FORMAT is a
2184 printf-style format string used to tell the user what was
2188 ambiguous_line_spec (gdb::array_view
<const symtab_and_line
> sals
,
2189 const char *format
, ...)
2192 va_start (ap
, format
);
2193 gdb_vprintf (format
, ap
);
2196 for (const auto &sal
: sals
)
2197 print_sal_location (sal
);
2200 /* Comparison function for filter_sals. Returns a qsort-style
2204 cmp_symtabs (const symtab_and_line
&sala
, const symtab_and_line
&salb
)
2206 const char *dira
= sala
.symtab
->compunit ()->dirname ();
2207 const char *dirb
= salb
.symtab
->compunit ()->dirname ();
2215 else if (dirb
== NULL
)
2222 r
= filename_cmp (dira
, dirb
);
2227 r
= filename_cmp (sala
.symtab
->filename
, salb
.symtab
->filename
);
2231 if (sala
.line
< salb
.line
)
2233 return sala
.line
== salb
.line
? 0 : 1;
2236 /* Remove any SALs that do not match the current program space, or
2237 which appear to be "file:line" duplicates. */
2240 filter_sals (std::vector
<symtab_and_line
> &sals
)
2242 /* Remove SALs that do not match. */
2243 auto from
= std::remove_if (sals
.begin (), sals
.end (),
2244 [&] (const symtab_and_line
&sal
)
2245 { return (sal
.pspace
!= current_program_space
|| sal
.symtab
== NULL
); });
2248 std::sort (sals
.begin (), from
,
2249 [] (const symtab_and_line
&sala
, const symtab_and_line
&salb
)
2250 { return cmp_symtabs (sala
, salb
) < 0; });
2252 from
= std::unique (sals
.begin (), from
,
2253 [&] (const symtab_and_line
&sala
,
2254 const symtab_and_line
&salb
)
2255 { return cmp_symtabs (sala
, salb
) == 0; });
2257 sals
.erase (from
, sals
.end ());
2261 show_info_verbose (struct ui_file
*file
, int from_tty
,
2262 struct cmd_list_element
*c
,
2267 _("Verbose printing of informational messages is %s.\n"),
2270 gdb_printf (file
, _("Verbosity is %s.\n"), value
);
2274 show_history_expansion_p (struct ui_file
*file
, int from_tty
,
2275 struct cmd_list_element
*c
, const char *value
)
2277 gdb_printf (file
, _("History expansion on command input is %s.\n"),
2282 show_max_user_call_depth (struct ui_file
*file
, int from_tty
,
2283 struct cmd_list_element
*c
, const char *value
)
2286 _("The max call depth for user-defined commands is %s.\n"),
2290 /* Implement 'show suppress-cli-notifications'. */
2293 show_suppress_cli_notifications (ui_file
*file
, int from_tty
,
2294 cmd_list_element
*c
, const char *value
)
2296 gdb_printf (file
, _("Suppression of printing CLI notifications "
2297 "is %s.\n"), value
);
2300 /* Implement 'set suppress-cli-notifications'. */
2303 set_suppress_cli_notifications (const char *args
, int from_tty
,
2304 cmd_list_element
*c
)
2306 cli_suppress_notification
.user_selected_context
2307 = user_wants_cli_suppress_notification
;
2308 cli_suppress_notification
.normal_stop
2309 = user_wants_cli_suppress_notification
;
2312 /* Returns the cmd_list_element in SHOWLIST corresponding to the first
2313 argument of ARGV, which must contain one single value.
2314 Throws an error if no value provided, or value not correct.
2315 FNNAME is used in the error message. */
2317 static cmd_list_element
*
2318 setting_cmd (const char *fnname
, struct cmd_list_element
*showlist
,
2319 int argc
, struct value
**argv
)
2322 error (_("You must provide an argument to %s"), fnname
);
2324 error (_("You can only provide one argument to %s"), fnname
);
2326 struct type
*type0
= check_typedef (argv
[0]->type ());
2328 if (type0
->code () != TYPE_CODE_ARRAY
2329 && type0
->code () != TYPE_CODE_STRING
)
2330 error (_("First argument of %s must be a string."), fnname
);
2332 /* Not all languages null-terminate their strings, by moving the string
2333 content into a std::string we ensure that a null-terminator is added.
2334 For languages that do add a null-terminator the std::string might end
2335 up with two null characters at the end, but that's harmless. */
2336 const std::string
setting ((const char *) argv
[0]->contents ().data (),
2338 const char *a0
= setting
.c_str ();
2339 cmd_list_element
*cmd
= lookup_cmd (&a0
, showlist
, "", NULL
, -1, 0);
2341 if (cmd
== nullptr || cmd
->type
!= show_cmd
)
2343 gdb_assert (showlist
->prefix
!= nullptr);
2344 std::vector
<std::string
> components
2345 = showlist
->prefix
->command_components ();
2346 std::string full_name
= components
[0];
2347 for (int i
= 1; i
< components
.size (); ++i
)
2348 full_name
+= " " + components
[i
];
2349 error (_("First argument of %s must be a valid setting of the "
2350 "'%s' command."), fnname
, full_name
.c_str ());
2356 /* Builds a value from the show CMD. */
2358 static struct value
*
2359 value_from_setting (const setting
&var
, struct gdbarch
*gdbarch
)
2361 switch (var
.type ())
2368 = (var
.type () == var_uinteger
2369 ? static_cast<LONGEST
> (var
.get
<unsigned int> ())
2370 : static_cast<LONGEST
> (var
.get
<int> ()));
2372 if (var
.extra_literals () != nullptr)
2373 for (const literal_def
*l
= var
.extra_literals ();
2374 l
->literal
!= nullptr;
2376 if (value
== l
->use
)
2378 if (l
->val
.has_value ())
2381 return value::allocate (builtin_type (gdbarch
)->builtin_void
);
2385 if (var
.type () == var_uinteger
)
2387 value_from_ulongest (builtin_type (gdbarch
)->builtin_unsigned_int
,
2388 static_cast<unsigned int> (value
));
2391 value_from_longest (builtin_type (gdbarch
)->builtin_int
,
2392 static_cast<int> (value
));
2395 return value_from_longest (builtin_type (gdbarch
)->builtin_int
,
2396 var
.get
<bool> () ? 1 : 0);
2397 case var_auto_boolean
:
2401 switch (var
.get
<enum auto_boolean
> ())
2403 case AUTO_BOOLEAN_TRUE
:
2406 case AUTO_BOOLEAN_FALSE
:
2409 case AUTO_BOOLEAN_AUTO
:
2413 gdb_assert_not_reached ("invalid var_auto_boolean");
2415 return value_from_longest (builtin_type (gdbarch
)->builtin_int
,
2419 case var_string_noescape
:
2420 case var_optional_filename
:
2426 if (var
.type () == var_enum
)
2428 value
= var
.get
<const char *> ();
2429 len
= strlen (value
);
2433 const std::string
&st
= var
.get
<std::string
> ();
2434 value
= st
.c_str ();
2438 return current_language
->value_string (gdbarch
, value
, len
);
2442 std::string s
= var
.get
<ui_file_style::color
> ().to_string ();
2443 return current_language
->value_string (gdbarch
, s
.c_str (), s
.size ());
2446 gdb_assert_not_reached ("bad var_type");
2450 /* Implementation of the convenience function $_gdb_setting. */
2452 static struct value
*
2453 gdb_setting_internal_fn (struct gdbarch
*gdbarch
,
2454 const struct language_defn
*language
,
2455 void *cookie
, int argc
, struct value
**argv
)
2457 cmd_list_element
*show_cmd
2458 = setting_cmd ("$_gdb_setting", showlist
, argc
, argv
);
2460 gdb_assert (show_cmd
->var
.has_value ());
2462 return value_from_setting (*show_cmd
->var
, gdbarch
);
2465 /* Implementation of the convenience function $_gdb_maint_setting. */
2467 static struct value
*
2468 gdb_maint_setting_internal_fn (struct gdbarch
*gdbarch
,
2469 const struct language_defn
*language
,
2470 void *cookie
, int argc
, struct value
**argv
)
2472 cmd_list_element
*show_cmd
2473 = setting_cmd ("$_gdb_maint_setting", maintenance_show_cmdlist
, argc
, argv
);
2475 gdb_assert (show_cmd
->var
.has_value ());
2477 return value_from_setting (*show_cmd
->var
, gdbarch
);
2480 /* Builds a string value from the show CMD. */
2482 static struct value
*
2483 str_value_from_setting (const setting
&var
, struct gdbarch
*gdbarch
)
2485 switch (var
.type ())
2491 case var_auto_boolean
:
2494 std::string cmd_val
= get_setshow_command_value_string (var
);
2496 return current_language
->value_string (gdbarch
, cmd_val
.c_str (),
2501 case var_string_noescape
:
2502 case var_optional_filename
:
2505 /* For these cases, we do not use get_setshow_command_value_string,
2506 as this function handle some characters specially, e.g. by
2507 escaping quotevar. So, we directly use the var string value,
2508 similarly to the value_from_setting code for these casevar. */
2512 if (var
.type () == var_enum
)
2514 value
= var
.get
<const char *> ();
2515 len
= strlen (value
);
2519 const std::string
&st
= var
.get
<std::string
> ();
2520 value
= st
.c_str ();
2524 return current_language
->value_string (gdbarch
, value
, len
);
2527 gdb_assert_not_reached ("bad var_type");
2531 /* Implementation of the convenience function $_gdb_setting_str. */
2533 static struct value
*
2534 gdb_setting_str_internal_fn (struct gdbarch
*gdbarch
,
2535 const struct language_defn
*language
,
2536 void *cookie
, int argc
, struct value
**argv
)
2538 cmd_list_element
*show_cmd
2539 = setting_cmd ("$_gdb_setting_str", showlist
, argc
, argv
);
2541 gdb_assert (show_cmd
->var
.has_value ());
2543 return str_value_from_setting (*show_cmd
->var
, gdbarch
);
2547 /* Implementation of the convenience function $_gdb_maint_setting_str. */
2549 static struct value
*
2550 gdb_maint_setting_str_internal_fn (struct gdbarch
*gdbarch
,
2551 const struct language_defn
*language
,
2552 void *cookie
, int argc
, struct value
**argv
)
2554 cmd_list_element
*show_cmd
2555 = setting_cmd ("$_gdb_maint_setting_str", maintenance_show_cmdlist
, argc
,
2558 gdb_assert (show_cmd
->var
.has_value ());
2560 return str_value_from_setting (*show_cmd
->var
, gdbarch
);
2563 /* Implementation of the convenience function $_shell. */
2565 static struct value
*
2566 shell_internal_fn (struct gdbarch
*gdbarch
,
2567 const struct language_defn
*language
,
2568 void *cookie
, int argc
, struct value
**argv
)
2571 error (_("You must provide one argument for $_shell."));
2573 value
*val
= argv
[0];
2574 struct type
*type
= check_typedef (val
->type ());
2576 if (!language
->is_string_type_p (type
))
2577 error (_("Argument must be a string."));
2579 value_print_options opts
;
2580 get_no_prettyformat_print_options (&opts
);
2583 value_print (val
, &stream
, &opts
);
2585 /* We should always have two quote chars, which we'll strip. */
2586 gdb_assert (stream
.size () >= 2);
2588 /* Now strip them. We don't need the original string, so it's
2589 cheaper to do it in place, avoiding a string allocation. */
2590 std::string str
= stream
.release ();
2591 str
[str
.size () - 1] = 0;
2592 const char *command
= str
.c_str () + 1;
2594 int exit_status
= run_under_shell (command
, 0);
2596 struct type
*int_type
= builtin_type (gdbarch
)->builtin_int
;
2598 /* Keep the logic here in sync with
2599 exit_status_set_internal_vars. */
2601 if (WIFEXITED (exit_status
))
2602 return value_from_longest (int_type
, WEXITSTATUS (exit_status
));
2604 else if (WIFSIGNALED (exit_status
) && WTERMSIG (exit_status
) == -1)
2606 /* See exit_status_set_internal_vars. */
2607 return value_from_longest (int_type
, exit_status
);
2610 else if (WIFSIGNALED (exit_status
))
2612 /* (0x80 | SIGNO) is what most (all?) POSIX-like shells set as
2613 exit code on fatal signal termination. */
2614 return value_from_longest (int_type
, 0x80 | WTERMSIG (exit_status
));
2617 return value::allocate_optimized_out (int_type
);
2620 INIT_GDB_FILE (cli_cmds
)
2622 struct cmd_list_element
*c
;
2624 /* Define the classes of commands.
2625 They will appear in the help list in alphabetical order. */
2627 add_cmd ("internals", class_maintenance
, _("\
2628 Maintenance commands.\n\
2629 Some gdb commands are provided just for use by gdb maintainers.\n\
2630 These commands are subject to frequent change, and may not be as\n\
2631 well documented as user commands."),
2633 add_cmd ("obscure", class_obscure
, _("Obscure features."), &cmdlist
);
2634 add_cmd ("aliases", class_alias
,
2635 _("User-defined aliases of other commands."), &cmdlist
);
2636 add_cmd ("user-defined", class_user
, _("\
2637 User-defined commands.\n\
2638 The commands in this class are those defined by the user.\n\
2639 Use the \"define\" command to define a command."), &cmdlist
);
2640 add_cmd ("support", class_support
, _("Support facilities."), &cmdlist
);
2641 add_cmd ("status", class_info
, _("Status inquiries."), &cmdlist
);
2642 add_cmd ("files", class_files
, _("Specifying and examining files."),
2644 add_cmd ("breakpoints", class_breakpoint
,
2645 _("Making program stop at certain points."), &cmdlist
);
2646 add_cmd ("data", class_vars
, _("Examining data."), &cmdlist
);
2647 add_cmd ("stack", class_stack
, _("\
2648 Examining the stack.\n\
2649 The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
2650 counting from zero for the innermost (currently executing) frame.\n\n\
2651 At any time gdb identifies one frame as the \"selected\" frame.\n\
2652 Variable lookups are done with respect to the selected frame.\n\
2653 When the program being debugged stops, gdb selects the innermost frame.\n\
2654 The commands below can be used to select other frames by number or address."),
2657 add_cmd ("text-user-interface", class_tui
,
2658 _("TUI is the GDB text based interface.\n\
2659 In TUI mode, GDB can display several text windows showing\n\
2660 the source file, the processor registers, the program disassembly, ..."), &cmdlist
);
2662 add_cmd ("running", class_run
, _("Running the program."), &cmdlist
);
2664 /* Define general commands. */
2666 add_com ("pwd", class_files
, pwd_command
, _("\
2667 Print working directory.\n\
2668 This is used for your program as well."));
2670 c
= add_cmd ("cd", class_files
, cd_command
, _("\
2671 Set working directory to DIR for debugger.\n\
2672 The debugger's current working directory specifies where scripts and other\n\
2673 files that can be loaded by GDB are located.\n\
2674 In order to change the inferior's current working directory, the recommended\n\
2675 way is to use the \"set cwd\" command."), &cmdlist
);
2676 set_cmd_completer (c
, deprecated_filename_completer
);
2678 add_com ("echo", class_support
, echo_command
, _("\
2679 Print a constant string. Give string as argument.\n\
2680 C escape sequences may be used in the argument.\n\
2681 No newline is added at the end of the argument;\n\
2682 use \"\\n\" if you want a newline to be printed.\n\
2683 Since leading and trailing whitespace are ignored in command arguments,\n\
2684 if you want to print some you must use \"\\\" before leading whitespace\n\
2685 to be printed or after trailing whitespace."));
2687 add_setshow_enum_cmd ("script-extension", class_support
,
2688 script_ext_enums
, &script_ext_mode
, _("\
2689 Set mode for script filename extension recognition."), _("\
2690 Show mode for script filename extension recognition."), _("\
2691 off == no filename extension recognition (all sourced files are GDB scripts)\n\
2692 soft == evaluate script according to filename extension, fallback to GDB script\n\
2693 strict == evaluate script according to filename extension,\n\
2694 error if not supported"
2697 show_script_ext_mode
,
2698 &setlist
, &showlist
);
2700 cmd_list_element
*quit_cmd
2701 = add_com ("quit", class_support
, quit_command
, _("\
2703 Usage: quit [EXPR] or exit [EXPR]\n\
2704 The optional expression EXPR, if present, is evaluated and the result\n\
2705 used as GDB's exit code. The default is zero."));
2706 cmd_list_element
*help_cmd
2707 = add_com ("help", class_support
, help_command
,
2708 _("Print list of commands."));
2709 set_cmd_completer (help_cmd
, command_completer
);
2710 add_com_alias ("q", quit_cmd
, class_support
, 1);
2711 add_com_alias ("exit", quit_cmd
, class_support
, 1);
2712 add_com_alias ("h", help_cmd
, class_support
, 1);
2714 add_setshow_boolean_cmd ("verbose", class_support
, &info_verbose
, _("\
2715 Set verbosity."), _("\
2716 Show verbosity."), NULL
,
2719 &setlist
, &showlist
);
2721 add_setshow_prefix_cmd
2722 ("history", class_support
,
2723 _("Generic command for setting command history parameters."),
2724 _("Generic command for showing command history parameters."),
2725 &sethistlist
, &showhistlist
, &setlist
, &showlist
);
2727 add_setshow_boolean_cmd ("expansion", no_class
, &history_expansion_p
, _("\
2728 Set history expansion on command input."), _("\
2729 Show history expansion on command input."), _("\
2730 Without an argument, history expansion is enabled."),
2732 show_history_expansion_p
,
2733 &sethistlist
, &showhistlist
);
2735 cmd_list_element
*info_cmd
2736 = add_prefix_cmd ("info", class_info
, info_command
, _("\
2737 Generic command for showing things about the program being debugged."),
2738 &infolist
, 0, &cmdlist
);
2739 add_com_alias ("i", info_cmd
, class_info
, 1);
2740 add_com_alias ("inf", info_cmd
, class_info
, 1);
2742 add_com ("complete", class_obscure
, complete_command
,
2743 _("List the completions for the rest of the line as a command."));
2745 c
= add_show_prefix_cmd ("show", class_info
, _("\
2746 Generic command for showing things about the debugger."),
2747 &showlist
, 0, &cmdlist
);
2748 /* Another way to get at the same thing. */
2749 add_alias_cmd ("set", c
, class_info
, 0, &infolist
);
2751 cmd_list_element
*with_cmd
2752 = add_com ("with", class_vars
, with_command
, _("\
2753 Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\
2754 Usage: with SETTING [VALUE] [-- COMMAND]\n\
2755 Usage: w SETTING [VALUE] [-- COMMAND]\n\
2756 With no COMMAND, repeats the last executed command.\n\
2758 SETTING is any setting you can change with the \"set\" subcommands.\n\
2760 with language pascal -- print obj\n\
2761 with print elements unlimited -- print obj\n\
2763 You can change multiple settings using nested with, and use\n\
2764 abbreviations for commands and/or values. E.g.:\n\
2765 w la p -- w p el u -- p obj"));
2766 set_cmd_completer_handle_brkchars (with_cmd
, with_command_completer
);
2767 add_com_alias ("w", with_cmd
, class_vars
, 1);
2769 add_internal_function ("_gdb_setting_str", _("\
2770 $_gdb_setting_str - returns the value of a GDB setting as a string.\n\
2771 Usage: $_gdb_setting_str (setting)\n\
2773 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2774 boolean values are \"off\", \"on\".\n\
2775 Some integer settings accept an unlimited value, returned\n\
2776 as \"unlimited\"."),
2777 gdb_setting_str_internal_fn
, NULL
);
2779 add_internal_function ("_gdb_setting", _("\
2780 $_gdb_setting - returns the value of a GDB setting.\n\
2781 Usage: $_gdb_setting (setting)\n\
2782 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2783 boolean values are \"off\", \"on\".\n\
2784 Some integer settings accept an unlimited value, returned\n\
2785 as 0 or -1 depending on the setting."),
2786 gdb_setting_internal_fn
, NULL
);
2788 add_internal_function ("_gdb_maint_setting_str", _("\
2789 $_gdb_maint_setting_str - returns the value of a GDB maintenance setting.\n\
2790 Usage: $_gdb_maint_setting_str (setting)\n\
2792 Like \"$_gdb_maint_setting\", but the return value is always a string.\n\
2793 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2794 boolean values are \"off\", \"on\".\n\
2795 Some integer settings accept an unlimited value, returned\n\
2796 as \"unlimited\"."),
2797 gdb_maint_setting_str_internal_fn
, NULL
);
2799 add_internal_function ("_gdb_maint_setting", _("\
2800 $_gdb_maint_setting - returns the value of a GDB maintenance setting.\n\
2801 Usage: $_gdb_maint_setting (setting)\n\
2802 auto-boolean values are \"off\", \"on\", \"auto\".\n\
2803 boolean values are \"off\", \"on\".\n\
2804 Some integer settings accept an unlimited value, returned\n\
2805 as 0 or -1 depending on the setting."),
2806 gdb_maint_setting_internal_fn
, NULL
);
2808 add_internal_function ("_shell", _("\
2809 $_shell - execute a shell command and return the result.\n\
2811 Usage: $_shell (COMMAND)\n\
2815 COMMAND: The command to execute. Must be a string.\n\
2818 The command's exit code: zero on success, non-zero otherwise."),
2819 shell_internal_fn
, NULL
);
2821 add_cmd ("commands", no_set_class
, show_commands
, _("\
2822 Show the history of commands you typed.\n\
2823 You can supply a command number to start with, or a `+' to start after\n\
2824 the previous command number shown."),
2827 add_cmd ("version", no_set_class
, show_version
,
2828 _("Show what version of GDB this is."), &showlist
);
2830 add_cmd ("configuration", no_set_class
, show_configuration
,
2831 _("Show how GDB was configured at build time."), &showlist
);
2833 add_setshow_prefix_cmd ("debug", no_class
,
2834 _("Generic command for setting gdb debugging flags."),
2835 _("Generic command for showing gdb debugging flags."),
2836 &setdebuglist
, &showdebuglist
,
2837 &setlist
, &showlist
);
2839 cmd_list_element
*shell_cmd
2840 = add_com ("shell", class_support
, shell_command
, _("\
2841 Execute the rest of the line as a shell command.\n\
2842 With no arguments, run an inferior shell."));
2843 set_cmd_completer_handle_brkchars (shell_cmd
, shell_command_completer
);
2845 add_com_alias ("!", shell_cmd
, class_support
, 0);
2847 c
= add_com ("edit", class_files
, edit_command
, _("\
2848 Edit specified file or function.\n\
2849 With no argument, edits file containing most recent line listed.\n\
2850 Editing targets can be specified in these ways:\n\
2851 FILE:LINENUM, to edit at that line in that file,\n\
2852 FUNCTION, to edit at the beginning of that function,\n\
2853 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2854 *ADDRESS, to edit at the line containing that address.\n\
2855 Uses EDITOR environment variable contents as editor (or ex as default)."));
2857 c
->completer
= location_completer
;
2859 cmd_list_element
*pipe_cmd
2860 = add_com ("pipe", class_support
, pipe_command
, _("\
2861 Send the output of a gdb command to a shell command.\n\
2862 Usage: | [COMMAND] | SHELL_COMMAND\n\
2863 Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2864 Usage: pipe [COMMAND] | SHELL_COMMAND\n\
2865 Usage: pipe -d DELIM COMMAND DELIM SHELL_COMMAND\n\
2867 Executes COMMAND and sends its output to SHELL_COMMAND.\n\
2869 The -d option indicates to use the string DELIM to separate COMMAND\n\
2870 from SHELL_COMMAND, in alternative to |. This is useful in\n\
2871 case COMMAND contains a | character.\n\
2873 With no COMMAND, repeat the last executed command\n\
2874 and send its output to SHELL_COMMAND."));
2875 set_cmd_completer_handle_brkchars (pipe_cmd
, pipe_command_completer
);
2876 add_com_alias ("|", pipe_cmd
, class_support
, 0);
2878 cmd_list_element
*list_cmd
2879 = add_com ("list", class_files
, list_command
, _("\
2880 List specified function or line.\n\
2881 With no argument, lists ten more lines after or around previous listing.\n\
2882 \"list +\" lists the ten lines following a previous ten-line listing.\n\
2883 \"list -\" lists the ten lines before a previous ten-line listing.\n\
2884 \"list .\" lists ten lines around the point of execution in the current frame.\n\
2885 One argument specifies a line, and ten lines are listed around that line.\n\
2886 Two arguments with comma between specify starting and ending lines to list.\n\
2887 Lines can be specified in these ways:\n\
2888 LINENUM, to list around that line in current file,\n\
2889 FILE:LINENUM, to list around that line in that file,\n\
2890 FUNCTION, to list around beginning of that function,\n\
2891 FILE:FUNCTION, to distinguish among like-named static functions.\n\
2892 *ADDRESS, to list around the line containing that address.\n\
2893 With two args, if one is empty, it stands for ten lines away from\n\
2896 By default, when a single location is given, display ten lines.\n\
2897 This can be changed using \"set listsize\", and the current value\n\
2898 can be shown using \"show listsize\"."));
2900 add_com_alias ("l", list_cmd
, class_files
, 1);
2902 c
= add_com ("disassemble", class_vars
, disassemble_command
, _("\
2903 Disassemble a specified section of memory.\n\
2904 Usage: disassemble[/m|/r|/s] START [, END]\n\
2905 Default is the function surrounding the pc of the selected frame.\n\
2907 With a /s modifier, source lines are included (if available).\n\
2908 In this mode, the output is displayed in PC address order, and\n\
2909 file names and contents for all relevant source files are displayed.\n\
2911 With a /m modifier, source lines are included (if available).\n\
2912 This view is \"source centric\": the output is in source line order,\n\
2913 regardless of any optimization that is present. Only the main source file\n\
2914 is displayed, not those of, e.g., any inlined functions.\n\
2915 This modifier hasn't proved useful in practice and is deprecated\n\
2918 With a /r modifier, raw instructions in hex are included.\n\
2920 With a single argument, the function surrounding that address is dumped.\n\
2921 Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
2922 in the form of \"start,end\", or \"start,+length\".\n\
2924 Note that the address is interpreted as an expression, not as a location\n\
2925 like in the \"break\" command.\n\
2926 So, for example, if you want to disassemble function bar in file foo.c\n\
2927 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
2928 set_cmd_completer_handle_brkchars (c
, disassemble_command_completer
);
2930 c
= add_com ("make", class_support
, make_command
, _("\
2931 Run the ``make'' program using the rest of the line as arguments."));
2932 set_cmd_completer (c
, deprecated_filename_completer
);
2934 c
= add_cmd ("user", no_class
, show_user
, _("\
2935 Show definitions of non-python/scheme user defined commands.\n\
2936 Argument is the name of the user defined command.\n\
2937 With no argument, show definitions of all user defined commands."), &showlist
);
2938 set_cmd_completer (c
, show_user_completer
);
2939 add_com ("apropos", class_support
, apropos_command
, _("\
2940 Search for commands matching a REGEXP.\n\
2941 Usage: apropos [-v] REGEXP\n\
2942 Flag -v indicates to produce a verbose output, showing full documentation\n\
2943 of the matching commands."));
2945 add_setshow_uinteger_cmd ("max-user-call-depth", no_class
,
2946 &max_user_call_depth
, _("\
2947 Set the max call depth for non-python/scheme user-defined commands."), _("\
2948 Show the max call depth for non-python/scheme user-defined commands."), NULL
,
2950 show_max_user_call_depth
,
2951 &setlist
, &showlist
);
2953 add_setshow_boolean_cmd ("trace-commands", no_class
, &trace_commands
, _("\
2954 Set tracing of GDB CLI commands."), _("\
2955 Show state of GDB CLI command tracing."), _("\
2956 When 'on', each command is displayed as it is executed."),
2959 &setlist
, &showlist
);
2961 const auto alias_opts
= make_alias_options_def_group (nullptr);
2963 static std::string alias_help
2964 = gdb::option::build_help (_("\
2965 Define a new command that is an alias of an existing command.\n\
2966 Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n\
2967 ALIAS is the name of the alias command to create.\n\
2968 COMMAND is the command being aliased to.\n\
2973 GDB will automatically prepend the provided DEFAULT-ARGS to the list\n\
2974 of arguments explicitly provided when using ALIAS.\n\
2975 Use \"help aliases\" to list all user defined aliases and their default args.\n\
2978 Make \"spe\" an alias of \"set print elements\":\n\
2979 alias spe = set print elements\n\
2980 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
2981 alias -a set print elms = set print elements\n\
2982 Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n\
2983 alias btf = backtrace -full -past-entry -past-main\n\
2984 Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
2985 alias wLapPeu = with language pascal -- with print elements unlimited --"),
2988 c
= add_com ("alias", class_support
, alias_command
,
2989 alias_help
.c_str ());
2991 set_cmd_completer_handle_brkchars (c
, alias_command_completer
);
2993 add_setshow_boolean_cmd ("suppress-cli-notifications", no_class
,
2994 &user_wants_cli_suppress_notification
,
2996 Set whether printing notifications on CLI is suppressed."), _("\
2997 Show whether printing notifications on CLI is suppressed."), _("\
2998 When on, printing notifications (such as inferior/thread switch)\n\
2999 on CLI is suppressed."),
3000 set_suppress_cli_notifications
,
3001 show_suppress_cli_notifications
,
3005 const char *source_help_text
= xstrprintf (_("\
3006 Read commands from a file named FILE.\n\
3008 Usage: source [-s] [-v] FILE\n\
3009 -s: search for the script in the source search path,\n\
3010 even if FILE contains directories.\n\
3011 -v: each command in FILE is echoed as it is executed.\n\
3013 Note that the file \"%s\" is read automatically in this way\n\
3014 when GDB is started."), GDBINIT
).release ();
3015 c
= add_cmd ("source", class_support
, source_command
,
3016 source_help_text
, &cmdlist
);
3017 set_cmd_completer (c
, deprecated_filename_completer
);