1*99451b44SJordan Rupprecht/* 2*99451b44SJordan RupprechtAn example plugin for LLDB that provides a new foo command with a child subcommand 3*99451b44SJordan RupprechtCompile this into a dylib foo.dylib and load by placing in appropriate locations on disk or 4*99451b44SJordan Rupprechtby typing plugin load foo.dylib at the LLDB command line 5*99451b44SJordan Rupprecht*/ 6*99451b44SJordan Rupprecht 7*99451b44SJordan Rupprecht%include_SB_APIs% 8*99451b44SJordan Rupprecht 9*99451b44SJordan Rupprechtnamespace lldb { 10*99451b44SJordan Rupprecht bool 11*99451b44SJordan Rupprecht PluginInitialize (lldb::SBDebugger debugger); 12*99451b44SJordan Rupprecht} 13*99451b44SJordan Rupprecht 14*99451b44SJordan Rupprechtclass ChildCommand : public lldb::SBCommandPluginInterface 15*99451b44SJordan Rupprecht{ 16*99451b44SJordan Rupprechtpublic: 17*99451b44SJordan Rupprecht virtual bool 18*99451b44SJordan Rupprecht DoExecute (lldb::SBDebugger debugger, 19*99451b44SJordan Rupprecht char** command, 20*99451b44SJordan Rupprecht lldb::SBCommandReturnObject &result) 21*99451b44SJordan Rupprecht { 22*99451b44SJordan Rupprecht if (command) 23*99451b44SJordan Rupprecht { 24*99451b44SJordan Rupprecht const char* arg = *command; 25*99451b44SJordan Rupprecht while (arg) 26*99451b44SJordan Rupprecht { 27*99451b44SJordan Rupprecht result.Printf("%s ",arg); 28*99451b44SJordan Rupprecht arg = *(++command); 29*99451b44SJordan Rupprecht } 30*99451b44SJordan Rupprecht result.Printf("\n"); 31*99451b44SJordan Rupprecht return true; 32*99451b44SJordan Rupprecht } 33*99451b44SJordan Rupprecht return false; 34*99451b44SJordan Rupprecht } 35*99451b44SJordan Rupprecht 36*99451b44SJordan Rupprecht}; 37*99451b44SJordan Rupprecht 38*99451b44SJordan Rupprechtbool 39*99451b44SJordan Rupprechtlldb::PluginInitialize (lldb::SBDebugger debugger) 40*99451b44SJordan Rupprecht{ 41*99451b44SJordan Rupprecht lldb::SBCommandInterpreter interpreter = debugger.GetCommandInterpreter(); 42*99451b44SJordan Rupprecht lldb::SBCommand foo = interpreter.AddMultiwordCommand("plugin_loaded_command",NULL); 43*99451b44SJordan Rupprecht foo.AddCommand("child",new ChildCommand(),"a child of plugin_loaded_command"); 44*99451b44SJordan Rupprecht return true; 45*99451b44SJordan Rupprecht} 46