[Lldb-commits] [PATCH] D49831: Don't print two errors for unknown commands.

Raphael Isemann via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Jul 25 18:18:58 PDT 2018


teemperor created this revision.

We always print two error messages when we hit an unknown command. As the function with
one error message unconditionally calls the other, we can just remove that error message.

Fixes https://bugs.llvm.org/show_bug.cgi?id=38312


https://reviews.llvm.org/D49831

Files:
  packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories
  packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py
  source/Interpreter/CommandInterpreter.cpp


Index: source/Interpreter/CommandInterpreter.cpp
===================================================================
--- source/Interpreter/CommandInterpreter.cpp
+++ source/Interpreter/CommandInterpreter.cpp
@@ -1693,33 +1693,6 @@
           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)
Index: packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py
===================================================================
--- /dev/null
+++ 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")
Index: packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories
@@ -0,0 +1 @@
+cmdline


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49831.157415.patch
Type: text/x-patch
Size: 3403 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20180726/907d39da/attachment.bin>


More information about the lldb-commits mailing list