diff options
Diffstat (limited to 'examples/python/cmdtemplate.py')
-rw-r--r-- | examples/python/cmdtemplate.py | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/examples/python/cmdtemplate.py b/examples/python/cmdtemplate.py deleted file mode 100644 index 0acb04ef4715..000000000000 --- a/examples/python/cmdtemplate.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/python - -# --------------------------------------------------------------------- -# Be sure to add the python path that points to the LLDB shared library. -# -# # To use this in the embedded python interpreter using "lldb" just -# import it with the full path using the "command script import" -# command -# (lldb) command script import /path/to/cmdtemplate.py -# --------------------------------------------------------------------- - -import inspect -import lldb -import optparse -import shlex -import sys - - -class FrameStatCommand: - program = 'framestats' - - @classmethod - def register_lldb_command(cls, debugger, module_name): - parser = cls.create_options() - cls.__doc__ = parser.format_help() - # Add any commands contained in this module to LLDB - command = 'command script add -c %s.%s %s' % (module_name, - cls.__name__, - cls.program) - debugger.HandleCommand(command) - print('The "{0}" command has been installed, type "help {0}" or "{0} ' - '--help" for detailed help.'.format(cls.program)) - - @classmethod - def create_options(cls): - - usage = "usage: %prog [options]" - description = ('This command is meant to be an example of how to make ' - 'an LLDB command that does something useful, follows ' - 'best practices, and exploits the SB API. ' - 'Specifically, this command computes the aggregate ' - 'and average size of the variables in the current ' - 'frame and allows you to tweak exactly which variables ' - 'are to be accounted in the computation.') - - # Pass add_help_option = False, since this keeps the command in line - # with lldb commands, and we wire up "help command" to work by - # providing the long & short help methods below. - parser = optparse.OptionParser( - description=description, - prog=cls.program, - usage=usage, - add_help_option=False) - - parser.add_option( - '-i', - '--in-scope', - action='store_true', - dest='inscope', - help='in_scope_only = True', - default=True) - - parser.add_option( - '-a', - '--arguments', - action='store_true', - dest='arguments', - help='arguments = True', - default=True) - - parser.add_option( - '-l', - '--locals', - action='store_true', - dest='locals', - help='locals = True', - default=True) - - parser.add_option( - '-s', - '--statics', - action='store_true', - dest='statics', - help='statics = True', - default=True) - - return parser - - def get_short_help(self): - return "Example command for use in debugging" - - def get_long_help(self): - return self.help_string - - def __init__(self, debugger, unused): - self.parser = self.create_options() - self.help_string = self.parser.format_help() - - def __call__(self, debugger, command, exe_ctx, result): - # Use the Shell Lexer to properly parse up command options just like a - # shell would - command_args = shlex.split(command) - - try: - (options, args) = self.parser.parse_args(command_args) - except: - # if you don't handle exceptions, passing an incorrect argument to - # the OptionParser will cause LLDB to exit (courtesy of OptParse - # dealing with argument errors by throwing SystemExit) - result.SetError("option parsing failed") - return - - # Always get program state from the lldb.SBExecutionContext passed - # in as exe_ctx - frame = exe_ctx.GetFrame() - if not frame.IsValid(): - result.SetError("invalid frame") - return - - variables_list = frame.GetVariables( - options.arguments, - options.locals, - options.statics, - options.inscope) - variables_count = variables_list.GetSize() - if variables_count == 0: - print >> result, "no variables here" - return - total_size = 0 - for i in range(0, variables_count): - variable = variables_list.GetValueAtIndex(i) - variable_type = variable.GetType() - total_size = total_size + variable_type.GetByteSize() - average_size = float(total_size) / variables_count - print >>result, ("Your frame has %d variables. Their total size " - "is %d bytes. The average size is %f bytes") % ( - variables_count, total_size, average_size) - # not returning anything is akin to returning success - - -def __lldb_init_module(debugger, dict): - # Register all classes that have a register_lldb_command method - for _name, cls in inspect.getmembers(sys.modules[__name__]): - if inspect.isclass(cls) and callable(getattr(cls, - "register_lldb_command", - None)): - cls.register_lldb_command(debugger, __name__) |