Index: packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py =================================================================== --- packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py +++ packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py @@ -0,0 +1,38 @@ +"""Test the RunCommandInterpreter API.""" + +import os +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * + +class CommandRunInterpreterAPICase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def setUp(self): + TestBase.setUp(self) + + self.stdin_path = self.getBuildArtifact("stdin.txt") + + with open(self.stdin_path, 'w') as input_handle: + input_handle.write("nonexistingcommand\nquit") + + with open(self.stdin_path, 'r') as input_handle: + self.dbg.SetInputFileHandle(input_handle, False) + + # No need to track the output + devnull = open(os.devnull, 'w') + self.dbg.SetOutputFileHandle(devnull, False) + self.dbg.SetErrorFileHandle(devnull, False) + + @add_test_categories(['pyapi']) + def test_run_session_with_error_and_quit(self): + """Run non-existing and quit command returns appropriate values""" + + n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter( + True, False, lldb.SBCommandInterpreterRunOptions(), 0, False, + False) + + self.assertGreater(n_errors, 0) + self.assertTrue(quit_requested) + self.assertFalse(has_crashed) Index: scripts/interface/SBDebugger.i =================================================================== --- scripts/interface/SBDebugger.i +++ scripts/interface/SBDebugger.i @@ -423,6 +423,32 @@ lldb::SBTypeSynthetic GetSyntheticForType (lldb::SBTypeNameSpecifier); + %feature("docstring", +"Launch a command interpreter session. Commands are read from standard input or +from the input handle specified for the debugger object. Output/errors are +similarly redirected to standard output/error or the configured handles. + +@param[in] auto_handle_events If true, automatically handle resulting events. +@param[in] spawn_thread If true, start a new thread for IO handling. +@param[in] options Parameter collection of type SBCommandInterpreterRunOptions. +@param[in] num_errors Initial error counter. +@param[in] quit_requested Initial quit request flag. +@param[in] stopped_for_crash Initial crash flag. + +@return +A tuple with the number of errors encountered by the interpreter, a boolean +indicating whether quitting the interpreter was requested and another boolean +set to True in case of a crash. + +Example: + +# Start an interactive lldb session from a script (with a valid debugger object +# created beforehand): +n_errors, quit_requested, has_crashed = debugger.RunCommandInterpreter(True, + False, lldb.SBCommandInterpreterRunOptions(), 0, False, False)") RunCommandInterpreter; + %apply int& INOUT { int& num_errors }; + %apply bool& INOUT { bool& quit_requested }; + %apply bool& INOUT { bool& stopped_for_crash }; void RunCommandInterpreter (bool auto_handle_events, bool spawn_thread,