From 6fcc7d703b571f456f662a0be1ec6f449d55fdb9 Mon Sep 17 00:00:00 2001 From: Raphael Isemann Date: Thu, 26 Jul 2018 16:32:05 +0000 Subject: [PATCH] Don't print two errors for unknown commands. Summary: We always print two error messages when we hit an unknown command. As the function `CommandInterpreter::HandleCommand` that prints the second error message unconditionally called the `CommandInterpreter::ResolveCommandImpl` before (which prints the first error message), we can just remove that second error message. Fixes https://bugs.llvm.org/show_bug.cgi?id=38312 Reviewers: labath Reviewed By: labath Subscribers: labath, lldb-commits Differential Revision: https://reviews.llvm.org/D49831 llvm-svn: 338040 --- .../functionalities/wrong_commands/.categories | 1 + .../wrong_commands/TestWrongCommands.py | 39 ++++++++++++++++++++++ lldb/source/Interpreter/CommandInterpreter.cpp | 27 --------------- 3 files changed, 40 insertions(+), 27 deletions(-) create mode 100644 lldb/packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories create mode 100644 lldb/packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories b/lldb/packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories new file mode 100644 index 0000000..3a3f4df --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories @@ -0,0 +1 @@ +cmdline diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py b/lldb/packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py new file mode 100644 index 0000000..dcfb434 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py @@ -0,0 +1,39 @@ +""" +Test how lldb reacts to wrong commands +""" + +from __future__ import print_function + +import os +import time +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +class UnknownCommandTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @no_debug_info_test + def test_ambiguous_command(self): + command_interpreter = self.dbg.GetCommandInterpreter() + self.assertTrue(command_interpreter, VALID_COMMAND_INTERPRETER) + result = lldb.SBCommandReturnObject() + + command_interpreter.HandleCommand("g", result) + self.assertFalse(result.Succeeded()) + self.assertRegexpMatches(result.GetError(), "Ambiguous command 'g'. Possible matches:") + self.assertRegexpMatches(result.GetError(), "gui") + self.assertRegexpMatches(result.GetError(), "gdb-remote") + # FIXME: Somehow we get 'gui' and 'gdb-remote' twice in the output. + + @no_debug_info_test + def test_unknown_command(self): + command_interpreter = self.dbg.GetCommandInterpreter() + self.assertTrue(command_interpreter, VALID_COMMAND_INTERPRETER) + result = lldb.SBCommandReturnObject() + + command_interpreter.HandleCommand("qbert", result) + self.assertFalse(result.Succeeded()) + self.assertEquals(result.GetError(), "error: 'qbert' is not a valid command.\n") diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp index df27eb2..977c9ba 100644 --- a/lldb/source/Interpreter/CommandInterpreter.cpp +++ b/lldb/source/Interpreter/CommandInterpreter.cpp @@ -1693,33 +1693,6 @@ bool CommandInterpreter::HandleCommand(const char *command_line, remainder.c_str()); cmd_obj->Execute(remainder.c_str(), result); - } else { - // We didn't find the first command object, so complete the first argument. - Args command_args(command_string); - StringList matches; - unsigned cursor_char_position = strlen(command_args.GetArgumentAtIndex(0)); - CompletionRequest request(command_line, cursor_char_position, 0, -1, - matches); - int num_matches = HandleCompletionMatches(request); - - if (num_matches > 0) { - std::string error_msg; - error_msg.assign("ambiguous command '"); - error_msg.append(command_args.GetArgumentAtIndex(0)); - error_msg.append("'."); - - error_msg.append(" Possible completions:"); - for (int i = 0; i < num_matches; i++) { - error_msg.append("\n\t"); - error_msg.append(matches.GetStringAtIndex(i)); - } - error_msg.append("\n"); - result.AppendRawError(error_msg.c_str()); - } else - result.AppendErrorWithFormat("Unrecognized command '%s'.\n", - command_args.GetArgumentAtIndex(0)); - - result.SetStatus(eReturnStatusFailed); } if (log) -- 2.7.4