* 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:
parent
5c5b5d4b0e
commit
311592ff50
@ -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
|
||||
|
@ -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)
|
||||
|
91
gdb/maint.c
91
gdb/maint.c
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user