xref: /llvm-project/lldb/test/API/functionalities/plugins/command_plugin/plugin.cpp.template (revision fdea9a4ec9b0d9585b8fe8a612686d9f44f40ddc)
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