|  | //===-- fooplugin.cpp -------------------------------------------*- C++ -*-===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | /* | 
|  | An example plugin for LLDB that provides a new foo command with a child | 
|  | subcommand | 
|  | Compile this into a dylib foo.dylib and load by placing in appropriate locations | 
|  | on disk or | 
|  | by typing plugin load foo.dylib at the LLDB command line | 
|  | */ | 
|  |  | 
|  | #include <LLDB/SBCommandInterpreter.h> | 
|  | #include <LLDB/SBCommandReturnObject.h> | 
|  | #include <LLDB/SBDebugger.h> | 
|  |  | 
|  | namespace lldb { | 
|  | bool PluginInitialize(lldb::SBDebugger debugger); | 
|  | } | 
|  |  | 
|  | class ChildCommand : public lldb::SBCommandPluginInterface { | 
|  | public: | 
|  | virtual bool DoExecute(lldb::SBDebugger debugger, char **command, | 
|  | lldb::SBCommandReturnObject &result) { | 
|  | if (command) { | 
|  | const char *arg = *command; | 
|  | while (arg) { | 
|  | result.Printf("%s\n", arg); | 
|  | arg = *(++command); | 
|  | } | 
|  | return true; | 
|  | } | 
|  | return false; | 
|  | } | 
|  | }; | 
|  |  | 
|  | bool lldb::PluginInitialize(lldb::SBDebugger debugger) { | 
|  | lldb::SBCommandInterpreter interpreter = debugger.GetCommandInterpreter(); | 
|  | lldb::SBCommand foo = interpreter.AddMultiwordCommand("foo", NULL); | 
|  | foo.AddCommand("child", new ChildCommand(), "a child of foo"); | 
|  | return true; | 
|  | } |