3 Copyright 2000, 2001, 2002 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 2 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, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
23 #include "completer.h"
24 #include "target.h" /* For baud_rate, remote_debug and remote_timeout */
25 #include "gdb_wait.h" /* For shell escape implementation */
26 #include "gdb_regex.h" /* Used by apropos_command */
27 #include "filenames.h" /* for DOSish file names */
32 #include "cli/cli-decode.h"
33 #include "cli/cli-script.h"
34 #include "cli/cli-setshow.h"
35 #include "cli/cli-cmds.h"
37 #ifndef GDBINIT_FILENAME
38 #define GDBINIT_FILENAME ".gdbinit"
43 extern void dont_repeat (void);
45 extern void set_verbose (char *, int, struct cmd_list_element
*);
47 extern void show_history (char *, int);
49 extern void set_history (char *, int);
51 extern void show_commands (char *, int);
53 /* Prototypes for local functions */
55 static void complete_command (char *, int);
57 static void echo_command (char *, int);
59 static void pwd_command (char *, int);
61 static void show_version (char *, int);
63 static void validate_comname (char *);
65 static void help_command (char *, int);
67 static void show_command (char *, int);
69 static void info_command (char *, int);
71 static void show_debug (char *, int);
73 static void set_debug (char *, int);
75 static void show_user (char *, int);
77 static void make_command (char *, int);
79 static void shell_escape (char *, int);
81 void apropos_command (char *, int);
83 /* Limit the call depth of user-defined commands */
84 int max_user_call_depth
;
86 /* Define all cmd_list_elements. */
88 /* Chain containing all defined commands. */
90 struct cmd_list_element
*cmdlist
;
92 /* Chain containing all defined info subcommands. */
94 struct cmd_list_element
*infolist
;
96 /* Chain containing all defined enable subcommands. */
98 struct cmd_list_element
*enablelist
;
100 /* Chain containing all defined disable subcommands. */
102 struct cmd_list_element
*disablelist
;
104 /* Chain containing all defined toggle subcommands. */
106 struct cmd_list_element
*togglelist
;
108 /* Chain containing all defined stop subcommands. */
110 struct cmd_list_element
*stoplist
;
112 /* Chain containing all defined delete subcommands. */
114 struct cmd_list_element
*deletelist
;
116 /* Chain containing all defined "enable breakpoint" subcommands. */
118 struct cmd_list_element
*enablebreaklist
;
120 /* Chain containing all defined set subcommands */
122 struct cmd_list_element
*setlist
;
124 /* Chain containing all defined unset subcommands */
126 struct cmd_list_element
*unsetlist
;
128 /* Chain containing all defined show subcommands. */
130 struct cmd_list_element
*showlist
;
132 /* Chain containing all defined \"set history\". */
134 struct cmd_list_element
*sethistlist
;
136 /* Chain containing all defined \"show history\". */
138 struct cmd_list_element
*showhistlist
;
140 /* Chain containing all defined \"unset history\". */
142 struct cmd_list_element
*unsethistlist
;
144 /* Chain containing all defined maintenance subcommands. */
146 struct cmd_list_element
*maintenancelist
;
148 /* Chain containing all defined "maintenance info" subcommands. */
150 struct cmd_list_element
*maintenanceinfolist
;
152 /* Chain containing all defined "maintenance print" subcommands. */
154 struct cmd_list_element
*maintenanceprintlist
;
156 struct cmd_list_element
*setprintlist
;
158 struct cmd_list_element
*showprintlist
;
160 struct cmd_list_element
*setdebuglist
;
162 struct cmd_list_element
*showdebuglist
;
164 struct cmd_list_element
*setchecklist
;
166 struct cmd_list_element
*showchecklist
;
168 /* Utility used everywhere when at least one argument is needed and
172 error_no_arg (char *why
)
174 error ("Argument required (%s).", why
);
177 /* The "info" command is defined as a prefix, with allow_unknown = 0.
178 Therefore, its own definition is called only for "info" with no args. */
182 info_command (char *arg
, int from_tty
)
184 printf_unfiltered ("\"info\" must be followed by the name of an info command.\n");
185 help_list (infolist
, "info ", -1, gdb_stdout
);
188 /* The "show" command with no arguments shows all the settings. */
192 show_command (char *arg
, int from_tty
)
194 cmd_show_list (showlist
, from_tty
, "");
197 /* Provide documentation on command or list given by COMMAND. FROM_TTY
202 help_command (char *command
, int from_tty
)
204 help_cmd (command
, gdb_stdout
);
207 /* String compare function for qsort. */
209 compare_strings (const void *arg1
, const void *arg2
)
211 const char **s1
= (const char **) arg1
;
212 const char **s2
= (const char **) arg2
;
213 return strcmp (*s1
, *s2
);
216 /* The "complete" command is used by Emacs to implement completion. */
220 complete_command (char *arg
, int from_tty
)
230 argpoint
= strlen (arg
);
232 completions
= complete_line (arg
, arg
, argpoint
);
238 for (size
= 0; completions
[size
]; ++size
)
240 qsort (completions
, size
, sizeof (char *), compare_strings
);
242 /* We do extra processing here since we only want to print each
248 printf_unfiltered ("%s\n", completions
[item
]);
249 next_item
= item
+ 1;
250 while (next_item
< size
251 && ! strcmp (completions
[item
], completions
[next_item
]))
253 xfree (completions
[next_item
]);
257 xfree (completions
[item
]);
266 is_complete_command (struct cmd_list_element
*c
)
268 return cmd_cfunc_eq (c
, complete_command
);
273 show_version (char *args
, int from_tty
)
276 print_gdb_version (gdb_stdout
);
277 printf_filtered ("\n");
281 /* Handle the quit command. */
284 quit_command (char *args
, int from_tty
)
286 if (!quit_confirm ())
287 error ("Not confirmed.");
288 quit_force (args
, from_tty
);
293 pwd_command (char *args
, int from_tty
)
296 error ("The \"pwd\" command does not take an argument: %s", args
);
297 getcwd (gdb_dirbuf
, sizeof (gdb_dirbuf
));
299 if (!STREQ (gdb_dirbuf
, current_directory
))
300 printf_unfiltered ("Working directory %s\n (canonically %s).\n",
301 current_directory
, gdb_dirbuf
);
303 printf_unfiltered ("Working directory %s.\n", current_directory
);
307 cd_command (char *dir
, int from_tty
)
310 /* Found something other than leading repetitions of "/..". */
314 /* If the new directory is absolute, repeat is a no-op; if relative,
315 repeat might be useful but is more likely to be a mistake. */
319 error_no_arg ("new working directory");
321 dir
= tilde_expand (dir
);
322 make_cleanup (xfree
, dir
);
325 perror_with_name (dir
);
327 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
328 /* There's too much mess with DOSish names like "d:", "d:.",
329 "d:./foo" etc. Instead of having lots of special #ifdef'ed code,
330 simply get the canonicalized name of the current directory. */
331 dir
= getcwd (gdb_dirbuf
, sizeof (gdb_dirbuf
));
335 if (IS_DIR_SEPARATOR (dir
[len
- 1]))
337 /* Remove the trailing slash unless this is a root directory
338 (including a drive letter on non-Unix systems). */
339 if (!(len
== 1) /* "/" */
340 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
341 && !(len
== 3 && dir
[1] == ':') /* "d:/" */
347 dir
= savestring (dir
, len
);
348 if (IS_ABSOLUTE_PATH (dir
))
349 current_directory
= dir
;
352 if (IS_DIR_SEPARATOR (current_directory
[strlen (current_directory
) - 1]))
353 current_directory
= concat (current_directory
, dir
, NULL
);
355 current_directory
= concat (current_directory
, SLASH_STRING
, dir
, NULL
);
359 /* Now simplify any occurrences of `.' and `..' in the pathname. */
362 for (p
= current_directory
; *p
;)
364 if (IS_DIR_SEPARATOR (p
[0]) && p
[1] == '.'
365 && (p
[2] == 0 || IS_DIR_SEPARATOR (p
[2])))
367 else if (IS_DIR_SEPARATOR (p
[0]) && p
[1] == '.' && p
[2] == '.'
368 && (p
[3] == 0 || IS_DIR_SEPARATOR (p
[3])))
372 /* Search backwards for the directory just before the "/.."
373 and obliterate it and the "/..". */
375 while (q
!= current_directory
&& !IS_DIR_SEPARATOR (q
[-1]))
378 if (q
== current_directory
)
379 /* current_directory is
380 a relative pathname ("can't happen"--leave it alone). */
384 strcpy (q
- 1, p
+ 3);
389 /* We are dealing with leading repetitions of "/..", for example
390 "/../..", which is the Mach super-root. */
400 forget_cached_source_info ();
403 pwd_command ((char *) 0, 1);
407 source_command (char *args
, int from_tty
)
410 struct cleanup
*old_cleanups
;
415 error ("source command requires pathname of file to source.");
418 file
= tilde_expand (file
);
419 old_cleanups
= make_cleanup (xfree
, file
);
421 stream
= fopen (file
, FOPEN_RT
);
425 perror_with_name (file
);
430 script_from_file (stream
, file
);
432 do_cleanups (old_cleanups
);
437 echo_command (char *text
, int from_tty
)
443 while ((c
= *p
++) != '\0')
447 /* \ at end of argument is used after spaces
448 so they won't be lost. */
452 c
= parse_escape (&p
);
454 printf_filtered ("%c", c
);
457 printf_filtered ("%c", c
);
460 /* Force this output to appear now. */
462 gdb_flush (gdb_stdout
);
467 shell_escape (char *arg
, int from_tty
)
470 /* If ARG is NULL, they want an inferior shell, but `system' just
471 reports if the shell is available when passed a NULL arg. */
472 int rc
= system (arg
? arg
: "");
475 arg
= "inferior shell";
479 fprintf_unfiltered (gdb_stderr
, "Cannot execute %s: %s\n", arg
,
480 safe_strerror (errno
));
481 gdb_flush (gdb_stderr
);
485 fprintf_unfiltered (gdb_stderr
, "%s exited with status %d\n", arg
, rc
);
486 gdb_flush (gdb_stderr
);
489 /* Make sure to return to the directory GDB thinks it is, in case the
490 shell command we just ran changed it. */
491 chdir (current_directory
);
493 #else /* Can fork. */
495 char *p
, *user_shell
;
497 if ((user_shell
= (char *) getenv ("SHELL")) == NULL
)
498 user_shell
= "/bin/sh";
500 /* Get the name of the shell for arg0 */
501 if ((p
= strrchr (user_shell
, '/')) == NULL
)
504 p
++; /* Get past '/' */
506 if ((pid
= fork ()) == 0)
509 execl (user_shell
, p
, 0);
511 execl (user_shell
, p
, "-c", arg
, 0);
513 fprintf_unfiltered (gdb_stderr
, "Cannot execute %s: %s\n", user_shell
,
514 safe_strerror (errno
));
515 gdb_flush (gdb_stderr
);
520 while ((rc
= wait (&status
)) != pid
&& rc
!= -1)
523 error ("Fork failed");
524 #endif /* Can fork. */
528 make_command (char *arg
, int from_tty
)
536 p
= xmalloc (sizeof ("make ") + strlen (arg
));
538 strcpy (p
+ sizeof ("make ") - 1, arg
);
541 shell_escape (p
, from_tty
);
546 show_user (char *args
, int from_tty
)
548 struct cmd_list_element
*c
;
549 extern struct cmd_list_element
*cmdlist
;
553 c
= lookup_cmd (&args
, cmdlist
, "", 0, 1);
554 if (c
->class != class_user
)
555 error ("Not a user command.");
556 show_user_1 (c
, gdb_stdout
);
560 for (c
= cmdlist
; c
; c
= c
->next
)
562 if (c
->class == class_user
)
563 show_user_1 (c
, gdb_stdout
);
568 /* Search through names of commands and documentations for a certain
572 apropos_command (char *searchstr
, int from_tty
)
574 extern struct cmd_list_element
*cmdlist
; /*This is the main command list*/
576 char *pattern_fastmap
;
577 char errorbuffer
[512];
578 pattern_fastmap
= xcalloc (256, sizeof (char));
579 if (searchstr
== NULL
)
580 error("REGEXP string is empty");
582 if (regcomp(&pattern
,searchstr
,REG_ICASE
) == 0)
584 pattern
.fastmap
=pattern_fastmap
;
585 re_compile_fastmap(&pattern
);
586 apropos_cmd (gdb_stdout
,cmdlist
,&pattern
,"");
590 regerror(regcomp(&pattern
,searchstr
,REG_ICASE
),NULL
,errorbuffer
,512);
591 error("Error in regular expression:%s",errorbuffer
);
593 xfree (pattern_fastmap
);
597 set_debug (char *arg
, int from_tty
)
599 printf_unfiltered ("\"set debug\" must be followed by the name of a print subcommand.\n");
600 help_list (setdebuglist
, "set debug ", -1, gdb_stdout
);
604 show_debug (char *args
, int from_tty
)
606 cmd_show_list (showdebuglist
, from_tty
, "");
610 init_cmd_lists (void)
612 max_user_call_depth
= 1024;
621 enablebreaklist
= NULL
;
627 unsethistlist
= NULL
;
628 maintenancelist
= NULL
;
629 maintenanceinfolist
= NULL
;
630 maintenanceprintlist
= NULL
;
632 showprintlist
= NULL
;
634 showchecklist
= NULL
;
641 struct cmd_list_element
*c
;
643 /* Define the classes of commands.
644 They will appear in the help list in the reverse of this order. */
646 add_cmd ("internals", class_maintenance
, NULL
,
647 "Maintenance commands.\n\
648 Some gdb commands are provided just for use by gdb maintainers.\n\
649 These commands are subject to frequent change, and may not be as\n\
650 well documented as user commands.",
652 add_cmd ("obscure", class_obscure
, NULL
, "Obscure features.", &cmdlist
);
653 add_cmd ("aliases", class_alias
, NULL
, "Aliases of other commands.", &cmdlist
);
654 add_cmd ("user-defined", class_user
, NULL
, "User-defined commands.\n\
655 The commands in this class are those defined by the user.\n\
656 Use the \"define\" command to define a command.", &cmdlist
);
657 add_cmd ("support", class_support
, NULL
, "Support facilities.", &cmdlist
);
659 add_cmd ("status", class_info
, NULL
, "Status inquiries.", &cmdlist
);
660 add_cmd ("files", class_files
, NULL
, "Specifying and examining files.", &cmdlist
);
661 add_cmd ("breakpoints", class_breakpoint
, NULL
, "Making program stop at certain points.", &cmdlist
);
662 add_cmd ("data", class_vars
, NULL
, "Examining data.", &cmdlist
);
663 add_cmd ("stack", class_stack
, NULL
, "Examining the stack.\n\
664 The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
665 counting from zero for the innermost (currently executing) frame.\n\n\
666 At any time gdb identifies one frame as the \"selected\" frame.\n\
667 Variable lookups are done with respect to the selected frame.\n\
668 When the program being debugged stops, gdb selects the innermost frame.\n\
669 The commands below can be used to select other frames by number or address.",
671 add_cmd ("running", class_run
, NULL
, "Running the program.", &cmdlist
);
673 /* Define general commands. */
675 add_com ("pwd", class_files
, pwd_command
,
676 "Print working directory. This is used for your program as well.");
677 c
= add_cmd ("cd", class_files
, cd_command
,
678 "Set working directory to DIR for debugger and program being debugged.\n\
679 The change does not take effect for the program being debugged\n\
680 until the next time it is started.", &cmdlist
);
681 set_cmd_completer (c
, filename_completer
);
683 add_com ("echo", class_support
, echo_command
,
684 "Print a constant string. Give string as argument.\n\
685 C escape sequences may be used in the argument.\n\
686 No newline is added at the end of the argument;\n\
687 use \"\\n\" if you want a newline to be printed.\n\
688 Since leading and trailing whitespace are ignored in command arguments,\n\
689 if you want to print some you must use \"\\\" before leading whitespace\n\
690 to be printed or after trailing whitespace.");
691 add_com ("document", class_support
, document_command
,
692 "Document a user-defined command.\n\
693 Give command name as argument. Give documentation on following lines.\n\
694 End with a line of just \"end\".");
695 add_com ("define", class_support
, define_command
,
696 "Define a new command name. Command name is argument.\n\
697 Definition appears on following lines, one command per line.\n\
698 End with a line of just \"end\".\n\
699 Use the \"document\" command to give documentation for the new command.\n\
700 Commands defined in this way may have up to ten arguments.");
702 c
= add_cmd ("source", class_support
, source_command
,
703 "Read commands from a file named FILE.\n\
704 Note that the file \"" GDBINIT_FILENAME
"\" is read automatically in this way\n\
705 when gdb is started.", &cmdlist
);
706 set_cmd_completer (c
, filename_completer
);
708 add_com ("quit", class_support
, quit_command
, "Exit gdb.");
709 c
= add_com ("help", class_support
, help_command
, "Print list of commands.");
710 set_cmd_completer (c
, command_completer
);
711 add_com_alias ("q", "quit", class_support
, 1);
712 add_com_alias ("h", "help", class_support
, 1);
714 c
= add_set_cmd ("verbose", class_support
, var_boolean
, (char *) &info_verbose
,
717 add_show_from_set (c
, &showlist
);
718 set_cmd_sfunc (c
, set_verbose
);
719 set_verbose (NULL
, 0, c
);
721 add_prefix_cmd ("history", class_support
, set_history
,
722 "Generic command for setting command history parameters.",
723 &sethistlist
, "set history ", 0, &setlist
);
724 add_prefix_cmd ("history", class_support
, show_history
,
725 "Generic command for showing command history parameters.",
726 &showhistlist
, "show history ", 0, &showlist
);
729 (add_set_cmd ("expansion", no_class
, var_boolean
, (char *) &history_expansion_p
,
730 "Set history expansion on command input.\n\
731 Without an argument, history expansion is enabled.", &sethistlist
),
734 add_prefix_cmd ("info", class_info
, info_command
,
735 "Generic command for showing things about the program being debugged.",
736 &infolist
, "info ", 0, &cmdlist
);
737 add_com_alias ("i", "info", class_info
, 1);
739 add_com ("complete", class_obscure
, complete_command
,
740 "List the completions for the rest of the line as a command.");
742 add_prefix_cmd ("show", class_info
, show_command
,
743 "Generic command for showing things about the debugger.",
744 &showlist
, "show ", 0, &cmdlist
);
745 /* Another way to get at the same thing. */
746 add_info ("set", show_command
, "Show all GDB settings.");
748 add_cmd ("commands", no_class
, show_commands
,
749 "Show the history of commands you typed.\n\
750 You can supply a command number to start with, or a `+' to start after\n\
751 the previous command number shown.",
754 add_cmd ("version", no_class
, show_version
,
755 "Show what version of GDB this is.", &showlist
);
757 add_com ("while", class_support
, while_command
,
758 "Execute nested commands WHILE the conditional expression is non zero.\n\
759 The conditional expression must follow the word `while' and must in turn be\n\
760 followed by a new line. The nested commands must be entered one per line,\n\
761 and should be terminated by the word `end'.");
763 add_com ("if", class_support
, if_command
,
764 "Execute nested commands once IF the conditional expression is non zero.\n\
765 The conditional expression must follow the word `if' and must in turn be\n\
766 followed by a new line. The nested commands must be entered one per line,\n\
767 and should be terminated by the word 'else' or `end'. If an else clause\n\
768 is used, the same rules apply to its nested commands as to the first ones.");
770 /* If target is open when baud changes, it doesn't take effect until the
771 next open (I think, not sure). */
772 add_show_from_set (add_set_cmd ("remotebaud", no_class
,
773 var_zinteger
, (char *) &baud_rate
,
774 "Set baud rate for remote serial I/O.\n\
775 This value is used to set the speed of the serial port when debugging\n\
776 using remote targets.", &setlist
),
779 c
= add_set_cmd ("remotedebug", no_class
, var_zinteger
,
780 (char *) &remote_debug
,
781 "Set debugging of remote protocol.\n\
782 When enabled, each packet sent or received with the remote target\n\
783 is displayed.", &setlist
);
784 deprecate_cmd (c
, "set debug remote");
785 deprecate_cmd (add_show_from_set (c
, &showlist
), "show debug remote");
787 add_show_from_set (add_set_cmd ("remote", no_class
, var_zinteger
,
788 (char *) &remote_debug
,
789 "Set debugging of remote protocol.\n\
790 When enabled, each packet sent or received with the remote target\n\
791 is displayed.", &setdebuglist
),
795 add_set_cmd ("remotetimeout", no_class
, var_integer
, (char *) &remote_timeout
,
796 "Set timeout limit to wait for target to respond.\n\
797 This value is used to set the time limit for gdb to wait for a response\n\
798 from the target.", &setlist
),
801 add_prefix_cmd ("debug", no_class
, set_debug
,
802 "Generic command for setting gdb debugging flags",
803 &setdebuglist
, "set debug ", 0, &setlist
);
805 add_prefix_cmd ("debug", no_class
, show_debug
,
806 "Generic command for showing gdb debugging flags",
807 &showdebuglist
, "show debug ", 0, &showlist
);
809 c
= add_com ("shell", class_support
, shell_escape
,
810 "Execute the rest of the line as a shell command.\n\
811 With no arguments, run an inferior shell.");
812 set_cmd_completer (c
, filename_completer
);
814 /* NOTE: cagney/2000-03-20: Being able to enter ``(gdb) !ls'' would
815 be a really useful feature. Unfortunately, the below wont do
816 this. Instead it adds support for the form ``(gdb) ! ls''
817 (i.e. the space is required). If the ``!'' command below is
818 added the complains about no ``!'' command would be replaced by
819 complains about how the ``!'' command is broken :-) */
821 add_com_alias ("!", "shell", class_support
, 0);
823 c
= add_com ("make", class_support
, make_command
,
824 "Run the ``make'' program using the rest of the line as arguments.");
825 set_cmd_completer (c
, filename_completer
);
826 add_cmd ("user", no_class
, show_user
,
827 "Show definitions of user defined commands.\n\
828 Argument is the name of the user defined command.\n\
829 With no argument, show definitions of all user defined commands.", &showlist
);
830 add_com ("apropos", class_support
, apropos_command
, "Search for commands matching a REGEXP");
833 add_set_cmd ("max-user-call-depth", no_class
, var_integer
,
834 (char *) &max_user_call_depth
,
835 "Set the max call depth for user-defined commands.\n",
This page took 0.04703 seconds and 4 git commands to generate.