1ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata//===-- fooplugin.cpp -------------------------------------------*- C++ -*-===// 2ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata// 3ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata// The LLVM Compiler Infrastructure 4ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata// 5ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata// This file is distributed under the University of Illinois Open Source 6ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata// License. See LICENSE.TXT for details. 7ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata// 8ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata//===----------------------------------------------------------------------===// 9ad7643907dc6d5298b9eaf7cfd05181cd815dd26Enrico Granata 106d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata/* 116d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataAn example plugin for LLDB that provides a new foo command with a child subcommand 126d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataCompile this into a dylib foo.dylib and load by placing in appropriate locations on disk or 136d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granataby typing plugin load foo.dylib at the LLDB command line 146d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata*/ 156d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 166d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata#include <LLDB/SBCommandInterpreter.h> 176d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata#include <LLDB/SBCommandReturnObject.h> 186d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata#include <LLDB/SBDebugger.h> 196d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 206d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatanamespace lldb { 216d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata bool 226d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata PluginInitialize (lldb::SBDebugger debugger); 236d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata} 246d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 256d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granataclass ChildCommand : public lldb::SBCommandPluginInterface 266d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 276d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatapublic: 286d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata virtual bool 296d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata DoExecute (lldb::SBDebugger debugger, 306d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata char** command, 316d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata lldb::SBCommandReturnObject &result) 326d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata { 336d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (command) 346d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata { 356d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata const char* arg = *command; 366d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata while (arg) 376d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata { 3808f7fffad31287d960d1a5daf0f7de636672ff43Enrico Granata result.Printf("%s\n",arg); 396d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata arg = *(++command); 406d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata } 416d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return true; 426d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata } 436d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return false; 446d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata } 456d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 466d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata}; 476d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 486d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatabool 496d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatalldb::PluginInitialize (lldb::SBDebugger debugger) 506d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 516d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata lldb::SBCommandInterpreter interpreter = debugger.GetCommandInterpreter(); 526d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata lldb::SBCommand foo = interpreter.AddMultiwordCommand("foo",NULL); 536d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata foo.AddCommand("child",new ChildCommand(),"a child of foo"); 546d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return true; 556d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata} 566d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 57