* command.c (lookup_cmd_1): Clarify descriptive comments.

* gdbcmd.h (maintenanceprintlist):  Add declaration.
	* main.c (maintenanceprintlist):  Add definition.
	* main.c (gdb_completer_command_word_break_characters):  Add.
	* main.c (symbol_completion_function):  Switch completer word
	break character sets dynamically, based on whether completion is
	being done on commands or on something else.
	* main.c (initialize_cmd_lists):  Init maintenanceprintlist.
	* maint.c:  Include demangle.h.
	* maint.c (maintenance_demangle):  New function.
	* maint.c (maintenance_print_command):  New function.
	* maint.c (_initialize_maint_cmds):  Reorganize some commands
	under new maintenance print subcommand.
This commit is contained in:
Fred Fish 1992-07-10 17:22:35 +00:00
parent 5c5b5d4b0e
commit 311592ff50
3 changed files with 113 additions and 33 deletions

View File

@ -1,3 +1,19 @@
Fri Jul 10 10:19:52 1992 Fred Fish (fnf@cygnus.com)
* command.c (lookup_cmd_1): Clarify descriptive comments.
* gdbcmd.h (maintenanceprintlist): Add declaration.
* main.c (maintenanceprintlist): Add definition.
* main.c (gdb_completer_command_word_break_characters): Add.
* main.c (symbol_completion_function): Switch completer word
break character sets dynamically, based on whether completion is
being done on commands or on something else.
* main.c (initialize_cmd_lists): Init maintenanceprintlist.
* maint.c: Include demangle.h.
* maint.c (maintenance_demangle): New function.
* maint.c (maintenance_print_command): New function.
* maint.c (_initialize_maint_cmds): Reorganize some commands
under new maintenance print subcommand.
Thu Jul 9 19:05:27 1992 Per Bothner (bothner@rtl.cygnus.com)
* gdbtypes.c (lookup_struct_elt_type): If the input type is

View File

@ -471,36 +471,35 @@ help_cmd_list (list, class, prefix, recurse, stream)
}
}
/* This routine takes a line of TEXT and a CLIST in which to
start the lookup. When it returns it will have incremented the text
pointer past the section of text it matched, set *RESULT_LIST to
the list in which the last word was matched, and will return the
cmd list element which the text matches. It will return 0 if no
match at all was possible. It will return -1 if ambigous matches are
possible; in this case *RESULT_LIST will be set to the list in which
there are ambiguous choices (and text will be set to the ambiguous
text string).
/* This routine takes a line of TEXT and a CLIST in which to start the
lookup. When it returns it will have incremented the text pointer past
the section of text it matched, set *RESULT_LIST to point to the list in
which the last word was matched, and will return a pointer to the cmd
list element which the text matches. It will return NULL if no match at
all was possible. It will return -1 (cast appropriately, ick) if ambigous
matches are possible; in this case *RESULT_LIST will be set to point to
the list in which there are ambiguous choices (and *TEXT will be set to
the ambiguous text string).
It does no error reporting whatsoever; control will always return
to the superior routine.
In the case of an ambiguous return (-1), *RESULT_LIST will be set to
point at the prefix_command (ie. the best match) *or* (special
case) will be 0 if no prefix command was ever found. For example,
in the case of "info a", "info" matches without ambiguity, but "a"
could be "args" or "address", so *RESULT_LIST is set to
the cmd_list_element for "info". So in this case
result list should not be interpeted as a pointer to the beginning
of a list; it simply points to a specific command.
In the case of an ambiguous return (-1), *RESULT_LIST will be set to point
at the prefix_command (ie. the best match) *or* (special case) will be NULL
if no prefix command was ever found. For example, in the case of "info a",
"info" matches without ambiguity, but "a" could be "args" or "address", so
*RESULT_LIST is set to the cmd_list_element for "info". So in this case
RESULT_LIST should not be interpeted as a pointer to the beginning of a
list; it simply points to a specific command.
If RESULT_LIST is NULL, don't set *RESULT_LIST (but don't otherwise
affect the operation).
This routine does *not* modify the text pointed to by TEXT.
If IGNORE_HELP_CLASSES is nonzero, ignore any command list
elements which are actually help classes rather than commands (i.e.
the function field of the struct cmd_list_element is 0). */
If IGNORE_HELP_CLASSES is nonzero, ignore any command list elements which
are actually help classes rather than commands (i.e. the function field of
the struct cmd_list_element is NULL). */
struct cmd_list_element *
lookup_cmd_1 (text, clist, result_list, ignore_help_classes)

View File

@ -28,6 +28,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "gdbcmd.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "demangle.h"
static void
maintenance_command PARAMS ((char *, int));
@ -35,6 +36,9 @@ maintenance_command PARAMS ((char *, int));
static void
maintenance_dump_me PARAMS ((char *, int));
static void
maintenance_demangle PARAMS ((char *, int));
/*
LOCAL FUNCTION
@ -72,6 +76,40 @@ maintenance_dump_me (args, from_tty)
}
}
/* Someday we should allow demangling for things other than just
explicit strings. For example, we might want to be able to
specify the address of a string in either GDB's process space
or the debuggee's process space, and have gdb fetch and demangle
that string. If we have a char* pointer "ptr" that points to
a string, we might want to be able to given just the name and
have GDB demangle and print what it points to, etc. (FIXME) */
static void
maintenance_demangle (args, from_tty)
char *args;
int from_tty;
{
char *demangled;
if (args == NULL || *args == '\0')
{
printf ("\"maintenance demangle\" takes an argument to demangle.\n");
}
else
{
demangled = cplus_demangle (args, DMGL_ANSI | DMGL_PARAMS);
if (demangled != NULL)
{
printf ("%s\n", demangled);
free (demangled);
}
else
{
printf ("Can't demangle \"%s\"\n", args);
}
}
}
/* The "maintenance info" command is defined as a prefix, with allow_unknown 0.
Therefore, its own definition is called only for "maintenance info" with
no args. */
@ -86,6 +124,20 @@ maintenance_info_command (arg, from_tty)
help_list (maintenanceinfolist, "maintenance info ", -1, stdout);
}
/* The "maintenance print" command is defined as a prefix, with allow_unknown
0. Therefore, its own definition is called only for "maintenance print"
with no args. */
/* ARGSUSED */
static void
maintenance_print_command (arg, from_tty)
char *arg;
int from_tty;
{
printf ("\"maintenance print\" must be followed by the name of a print command.\n");
help_list (maintenanceprintlist, "maintenance print ", -1, stdout);
}
/*
GLOBAL FUNCTION
@ -110,49 +162,62 @@ _initialize_maint_cmds ()
add_prefix_cmd ("maintenance", class_maintenance, maintenance_command,
"Commands for use by GDB maintainers.\n\
Includes commands to dump specific internal GDB structures in\n\
a human readable form, including dumping of symbol tables, type\n\
chains, etc.",
a human readable form, to cause GDB to deliberately dump core,\n\
to test internal functions such as the C++ demangler, etc.",
&maintenancelist, "maintenance ", 0,
&cmdlist);
add_com_alias ("mt", "maintenance", class_maintenance, 0);
add_prefix_cmd ("info", class_info, maintenance_info_command,
"Maintenance command for showing things about the program being debugged.",
"Commands for showing things about the program being debugged.",
&maintenanceinfolist, "maintenance info ", 0,
&maintenancelist);
add_prefix_cmd ("print", class_maintenance, maintenance_print_command,
"Maintenance command for printing GDB internal state.",
&maintenanceprintlist, "maintenance print ", 0,
&maintenancelist);
add_cmd ("dump-me", class_maintenance, maintenance_dump_me,
"Get fatal error; make debugger dump its core.\n\
GDB sets it's handling of SIGQUIT back to SIG_DFL and then sends\n\
itself a SIGQUIT signal.",
&maintenancelist);
add_cmd ("print-type", class_maintenance, maintenance_print_type,
add_cmd ("demangle", class_maintenance, maintenance_demangle,
"Demangle a C++ mangled name.\n\
Call internal GDB demangler routine to demangle a C++ link name\n\
and prints the result.",
&maintenancelist);
add_cmd ("type", class_maintenance, maintenance_print_type,
"Print a type chain for a given symbol.\n\
For each node in a type chain, print the raw data for each member of\n\
the type structure, and the interpretation of the data.",
&maintenancelist);
&maintenanceprintlist);
add_cmd ("print-symbols", class_maintenance, maintenance_print_symbols,
add_cmd ("symbols", class_maintenance, maintenance_print_symbols,
"Print dump of current symbol definitions.\n\
Entries in the full symbol table are dumped to file OUTFILE.\n\
If a SOURCE file is specified, dump only that file's symbols.",
&maintenancelist);
&maintenanceprintlist);
add_cmd ("print-msymbols", class_maintenance, maintenance_print_msymbols,
add_cmd ("msymbols", class_maintenance, maintenance_print_msymbols,
"Print dump of current minimal symbol definitions.\n\
Entries in the minimal symbol table are dumped to file OUTFILE.\n\
If a SOURCE file is specified, dump only that file's minimal symbols.",
&maintenancelist);
&maintenanceprintlist);
add_cmd ("print-psymbols", class_maintenance, maintenance_print_psymbols,
add_cmd ("psymbols", class_maintenance, maintenance_print_psymbols,
"Print dump of current partial symbol definitions.\n\
Entries in the partial symbol table are dumped to file OUTFILE.\n\
If a SOURCE file is specified, dump only that file's partial symbols.",
&maintenancelist);
&maintenanceprintlist);
add_cmd ("print-objfiles", class_maintenance, maintenance_print_objfiles,
add_cmd ("objfiles", class_maintenance, maintenance_print_objfiles,
"Print dump of current object file definitions.",
&maintenancelist);
&maintenanceprintlist);
}