Fix PR gdb/17035: "show user" doesn't list user-defined commands that
have empty bodies. User-defined commands that have empty bodies weren't being shown because the print function returned too soon. Now, it prints the command's name before checking if it has any body at all. This also fixes the same problem on "show user <myemptycommand>", which wasn't being printed due to a similar reason. gdb/Changelog: * cli/cli-cmds.c (show_user): Use cli_user_command_p to decide whether we display the command on "show user". * cli/cli-script.c (show_user_1): Only verify cmdlines after printing command name. * cli/cli-decode.h (cli_user_command_p): Declare new function. * cli/cli-decode.c (cli_user_command_p): Create helper function to verify whether cmd_list_element is a user-defined command. gdb/testsuite/Changelog: * gdb.base/commands.exp: Add tests to verify user-defined commands with empty bodies. * gdb.python/py-cmd.exp: Test that we don't show user-defined python commands in `show user command`. * gdb.python/scm-cmd.exp: Test that we don't show user-defined scheme commands in `show user command`.
This commit is contained in:
parent
c75bd3a239
commit
a9f116cbf2
@ -1,3 +1,14 @@
|
||||
2014-09-07 Gabriel Krisman Bertazi <gabriel@krisman.be>
|
||||
|
||||
PR gdb/17035
|
||||
* cli/cli-cmds.c (show_user): Use cli_user_command_p to
|
||||
decide whether we display the command on "show user".
|
||||
* cli/cli-script.c (show_user_1): Only verify cmdlines after
|
||||
printing command name.
|
||||
* cli/cli-decode.h (cli_user_command_p): Declare new function.
|
||||
* cli/cli-decode.c (cli_user_command_p): Create helper function
|
||||
to verify whether cmd_list_element is a user-defined command.
|
||||
|
||||
2014-09-07 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
PR python/17355
|
||||
|
@ -1245,8 +1245,7 @@ show_user (char *args, int from_tty)
|
||||
const char *comname = args;
|
||||
|
||||
c = lookup_cmd (&comname, cmdlist, "", 0, 1);
|
||||
/* c->user_commands would be NULL if it's a python/scheme command. */
|
||||
if (c->class != class_user || !c->user_commands)
|
||||
if (!cli_user_command_p (c))
|
||||
error (_("Not a user command."));
|
||||
show_user_1 (c, "", args, gdb_stdout);
|
||||
}
|
||||
@ -1254,7 +1253,7 @@ show_user (char *args, int from_tty)
|
||||
{
|
||||
for (c = cmdlist; c; c = c->next)
|
||||
{
|
||||
if (c->class == class_user || c->prefixlist != NULL)
|
||||
if (cli_user_command_p (c) || c->prefixlist != NULL)
|
||||
show_user_1 (c, "", c->name, gdb_stdout);
|
||||
}
|
||||
}
|
||||
|
@ -1894,3 +1894,10 @@ cmd_func (struct cmd_list_element *cmd, char *args, int from_tty)
|
||||
else
|
||||
error (_("Invalid command"));
|
||||
}
|
||||
|
||||
int
|
||||
cli_user_command_p (struct cmd_list_element *cmd)
|
||||
{
|
||||
return (cmd->class == class_user
|
||||
&& (cmd->func == do_cfunc || cmd->func == do_sfunc));
|
||||
}
|
||||
|
@ -242,4 +242,9 @@ extern void print_doc_line (struct ui_file *, const char *);
|
||||
|
||||
extern const char * const auto_boolean_enums[];
|
||||
|
||||
/* Verify whether a given cmd_list_element is a user-defined command.
|
||||
Return 1 if it is user-defined. Return 0 otherwise. */
|
||||
|
||||
extern int cli_user_command_p (struct cmd_list_element *);
|
||||
|
||||
#endif /* !defined (CLI_DECODE_H) */
|
||||
|
@ -1717,10 +1717,10 @@ show_user_1 (struct cmd_list_element *c, const char *prefix, const char *name,
|
||||
}
|
||||
|
||||
cmdlines = c->user_commands;
|
||||
if (!cmdlines)
|
||||
return;
|
||||
fprintf_filtered (stream, "User command \"%s%s\":\n", prefix, name);
|
||||
|
||||
if (!cmdlines)
|
||||
return;
|
||||
print_command_lines (current_uiout, cmdlines, 1);
|
||||
fputs_filtered ("\n", stream);
|
||||
}
|
||||
|
@ -1,3 +1,13 @@
|
||||
2014-09-07 Gabriel Krisman Bertazi <gabriel@krisman.be>
|
||||
|
||||
PR gdb/17035
|
||||
* gdb.base/commands.exp: Add tests to verify user-defined
|
||||
commands with empty bodies.
|
||||
* gdb.python/py-cmd.exp: Test that we don't show user-defined
|
||||
python commands in `show user command`.
|
||||
* gdb.python/scm-cmd.exp: Test that we don't show user-defined
|
||||
scheme commands in `show user command`.
|
||||
|
||||
2014-09-07 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
PR python/17355
|
||||
|
@ -243,6 +243,28 @@ proc user_defined_command_test {} {
|
||||
gdb_test "show user mycommand" \
|
||||
" while \\\$arg0.*set.* if \\\(\\\$arg0.*p/x.* else\[^\n\].*p/x.* end\[^\n\].* end\[^\n\].*" \
|
||||
"display user command in user_defined_command_test"
|
||||
|
||||
# Create and test a user-defined command with an empty body.
|
||||
gdb_test_multiple "define myemptycommand" \
|
||||
"define myemptycommand in user_defined_command_test" {
|
||||
-re "End with" {
|
||||
pass "define myemptycommand in user_defined_command_test"
|
||||
}
|
||||
}
|
||||
gdb_test "end" \
|
||||
"" \
|
||||
"end definition of user-defined command with empty body"
|
||||
|
||||
gdb_test_no_output "myemptycommand" \
|
||||
"execute user-defined empty command in user_defined_command_test"
|
||||
|
||||
gdb_test "show user" \
|
||||
"User command \"myemptycommand.*" \
|
||||
"display empty command in command list in user_defined_command_test"
|
||||
|
||||
gdb_test "show user myemptycommand" \
|
||||
"User command \"myemptycommand.*" \
|
||||
"display user-defined empty command in user_defined_command_test"
|
||||
}
|
||||
|
||||
proc watchpoint_command_test {} {
|
||||
|
@ -134,6 +134,10 @@ gdb_test "help user-defined" \
|
||||
"User-defined commands.\[\r\n\]+The commands in this class are those defined by the user.\[\r\n\]+Use the \"define\" command to define a command.\[\r\n\]+List of commands:\[\r\n\]+test-help -- Docstring\[\r\n\]+Type \"help\" followed by command name for full documentation.\[\r\n\]+Type \"apropos word\" to search for commands related to \"word\".\[\r\n\]+Command name abbreviations are allowed if unambiguous.\[\r\n\]+" \
|
||||
"see user-defined command in `help user-defined`"
|
||||
|
||||
# Make sure the command does not show up in `show user`.
|
||||
gdb_test "show user test-help" "Not a user command\." \
|
||||
"don't show user-defined scheme command in `show user command`"
|
||||
|
||||
# Test expression completion on fields.
|
||||
|
||||
gdb_test_multiline "expression completion command" \
|
||||
|
@ -161,6 +161,10 @@ gdb_test "test_help ugh" "test_cmd output, arg = ugh" "call simple user-defined
|
||||
# Make sure the command shows up in `help user-defined`.
|
||||
gdb_test "help user-defined" "User-defined commands.\[\r\n\]+The commands in this class are those defined by the user.\[\r\n\]+Use the \"define\" command to define a command.\[\r\n\]+\[\r\n\]+List of commands:\[\r\n\]+\[\r\n\]+test_help -- Docstring\[\r\n\]+\[\r\n\]+Type \"help\" followed by command name for full documentation.\[\r\n\]+Type \"apropos word\" to search for commands related to \"word\".\[\r\n\]+Command name abbreviations are allowed if unambiguous.\[\r\n\]+" "see user-defined command in `help user-defined`"
|
||||
|
||||
# Make sure the command does not show up in `show user`.
|
||||
gdb_test "show user test_help" "Not a user command\." \
|
||||
"don't show user-defined python command in `show user command`"
|
||||
|
||||
# Test expression completion on fields
|
||||
gdb_py_test_multiple "expression completion command" \
|
||||
"python" "" \
|
||||
|
Loading…
Reference in New Issue
Block a user