15cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen//===-- SWIG Interface for SBCommandInterpreter -----------------*- C++ -*-===// 25cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// 35cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// The LLVM Compiler Infrastructure 45cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// 55cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// This file is distributed under the University of Illinois Open Source 65cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// License. See LICENSE.TXT for details. 75cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// 85cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen//===----------------------------------------------------------------------===// 95cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 105cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chennamespace lldb { 115cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 12dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen%feature("docstring", 13dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen"SBCommandInterpreter handles/interprets commands for lldb. You get the 14dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chencommand interpreter from the SBDebugger instance. For example (from test/ 15dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chenpython_api/interpreter/TestCommandInterpreterAPI.py), 16dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen 17dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen def command_interpreter_api(self): 18dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen '''Test the SBCommandInterpreter APIs.''' 19dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen exe = os.path.join(os.getcwd(), 'a.out') 20dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen 21dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen # Create a target by the debugger. 22dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen target = self.dbg.CreateTarget(exe) 23dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(target, VALID_TARGET) 24dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen 25dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen # Retrieve the associated command interpreter from our debugger. 26dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen ci = self.dbg.GetCommandInterpreter() 27dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(ci, VALID_COMMAND_INTERPRETER) 28dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen 29dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen # Exercise some APIs.... 30dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen 31dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(ci.HasCommands()) 32dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(ci.HasAliases()) 33dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(ci.HasAliasOptions()) 34dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(ci.CommandExists('breakpoint')) 35dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(ci.CommandExists('target')) 36dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(ci.CommandExists('platform')) 37dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(ci.AliasExists('file')) 38dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(ci.AliasExists('run')) 39dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(ci.AliasExists('bt')) 40dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen 41dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen res = lldb.SBCommandReturnObject() 42dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen ci.HandleCommand('breakpoint set -f main.c -l %d' % self.line, res) 43dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(res.Succeeded()) 44dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen ci.HandleCommand('process launch', res) 45dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(res.Succeeded()) 46dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen 47dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen process = ci.GetProcess() 48dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen self.assertTrue(process) 49dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen 50dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen ... 51dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen 52dca40970e2e9012a632112d48c73645ecb69cc0cJohnny ChenThe HandleCommand() instance method takes two args: the command string and 53dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chenan SBCommandReturnObject instance which encapsulates the result of command 54dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chenexecution. 55dca40970e2e9012a632112d48c73645ecb69cc0cJohnny Chen") SBCommandInterpreter; 565cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chenclass SBCommandInterpreter 575cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen{ 585cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chenpublic: 595cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen enum 605cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen { 615cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen eBroadcastBitThreadShouldExit = (1 << 0), 625cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen eBroadcastBitResetPrompt = (1 << 1), 635cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen eBroadcastBitQuitCommandReceived = (1 << 2), // User entered quit 645cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen eBroadcastBitAsynchronousOutputData = (1 << 3), 655cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen eBroadcastBitAsynchronousErrorData = (1 << 4) 665cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen }; 675cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 685cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen SBCommandInterpreter (const lldb::SBCommandInterpreter &rhs); 695cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 705cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen ~SBCommandInterpreter (); 715cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 725cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen static const char * 735cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen GetArgumentTypeAsCString (const lldb::CommandArgumentType arg_type); 745cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 755cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen static const char * 765cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen GetArgumentDescriptionAsCString (const lldb::CommandArgumentType arg_type); 775cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 785cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen bool 795cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen IsValid() const; 805cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 815cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen bool 825cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen CommandExists (const char *cmd); 835cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 845cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen bool 855cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen AliasExists (const char *cmd); 865cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 875cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen lldb::SBBroadcaster 885cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen GetBroadcaster (); 895cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 905a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham static const char * 915a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham GetBroadcasterClass (); 925a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham 935cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen bool 945cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen HasCommands (); 955cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 965cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen bool 975cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen HasAliases (); 985cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 995cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen bool 1005cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen HasAliasOptions (); 1015cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 1025cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen lldb::SBProcess 1035cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen GetProcess (); 1046d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 1056d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata lldb::SBDebugger 1066d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata GetDebugger (); 1075cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 1085cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen void 1095cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen SourceInitFileInHomeDirectory (lldb::SBCommandReturnObject &result); 1105cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 1115cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen void 1125cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen SourceInitFileInCurrentWorkingDirectory (lldb::SBCommandReturnObject &result); 1135cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 1145cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen lldb::ReturnStatus 1155cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen HandleCommand (const char *command_line, lldb::SBCommandReturnObject &result, bool add_to_history = false); 1165cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 1175cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen int 1185cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen HandleCompletion (const char *current_line, 11903c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham uint32_t cursor_pos, 1205cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen int match_start_point, 1215cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen int max_return_elements, 1225cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen lldb::SBStringList &matches); 1235cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen}; 1245cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 1255cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen} // namespace lldb 126